Я хочу иметь возможность запрашивать статические файлы .html
, которые находятся в папке ~/Views
.
Согласно документации, система маршрутизации проверяет, соответствует ли URL-адрес файлу диска перед оценкой маршрутов приложения.
Но когда я запрашиваю файл, возникает ошибка 404
.
Мой файл находится в папке ~/Views.
URL-адрес: http://[localhost]/Views/HtmlPage1.html
Что я пропустил?
Ответ 1
Я хочу иметь возможность запрашивать статические .html файлы, которые находятся в папке ~ ~/Views.
Вы не можете. В этой папке есть файл web.config, который явно запрещает доступ к нему из любого файла. Если вы хотите иметь доступ к файлам с клиента, эти файлы не должны помещаться в папку Views
, которая имеет особое значение в ASP.NET MVC.
У вас может быть папка ~/Static
, где вы можете разместить ваши HTML файлы. И затем войдите в него так:
http://example.com/yourapplicationname/static/foo.html
Ответ 2
Чтобы разрешить такие файлы, как js и html в папке "Виды", отредактируйте файл web.config в виде-папке:
<system.webServer>
<handlers>
<add name="JavaScriptHandler" path="*.js" verb="*"
preCondition="integratedMode" type="System.Web.StaticFileHandler" />
<add name="HtmlScriptHandler" path="*.html" verb="*"
preCondition="integratedMode" type="System.Web.StaticFileHandler" />
<remove name="BlockViewHandler"/>
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
Ответ 3
Я хочу иметь возможность запрашивать статические .html файлы, которые находятся в папка ~/Views.
Хорошо. Отмеченный ответ не совсем корректен, хотя он дает решение.
Приведенные аргументы в правильном ответе правильны: в папке "Представления", которая запрещает доступ к файлам напрямую, устанавливается web.config(параметр BlockViewHandler). Он предназначен для защиты представлений в Asp.Net MVC. Но если вы задали вопрос об обслуживании этих файлов напрямую, то у вас, вероятно, есть веские основания для этого, например, использовать частичные представления AngularJS (как в нашем случае), где мы не хотим дублировать папку представлений со странными именами.
Итак, вот очень простая настройка, которую вы можете сделать в файле web.config, найденном в папке "Представления", без ущерба для безопасности ваших просмотров asp.net mvc. Это обеспечит файлы .cshtml, как обычно, но оставляйте только ваши .html файлы.
Измените это
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
- в -
<add name="BlockViewHandler" path="*.cshtml" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
Ответ 4
Другой альтернативный вариант заключается в том, чтобы вставить метод действия в любой из требуемых контроллеров, чтобы обслуживать html файл
public ActionResult MyHtml()
{
var result = new FilePathResult("~/Views/HtmlPage1.html", "text/html");
return result;
}
Доступ к html как http://yoursite/controller/MyHtml. Вы можете расширить этот метод действий, чтобы принять имя файла html в качестве параметра method/querystrign и отобразить файл во время выполнения, например, что-то вроде этого.
public ActionResult MyHtml(string htmlPageName)
{
var result = new FilePathResult($"~/Views/{htmlPageName}.html", "text/html");
return result;
}