Я хочу иметь возможность запрашивать статические .html
файлы, которые находятся в ~/Views
папке. Согласно документации, система маршрутизации проверяет, соответствует ли URL-адрес файлу на диске, прежде чем оценивать маршруты приложения.
Но когда я запрашиваю файл, 404
возникает ошибка.
Мой файл находится в папке ~ / Views. URL-адрес:http://[localhost]/Views/HtmlPage1.html
Что я пропустил?
источник
Чтобы разрешить файлы вроде js и html в папке Views, отредактируйте файл web.config в папке views-Folder:
<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>
источник
Ну ты можешь. Отмеченный ответ не совсем правильный, хотя и дает решение.
Обоснование в отмеченном ответе правильное, это web.config (точнее, параметр BlockViewHandler) в папке Views, который предотвращает прямой доступ к файлам. Он нужен для защиты представлений в Asp.Net MVC. Но если вы задали вопрос об обслуживании этих файлов напрямую, то у вас, вероятно, есть веская причина для этого, например, использование частичных представлений AngularJS (как в нашем случае), где мы не хотим дублировать папку представлений со странными именами.
Итак, вот очень простая настройка, которую вы можете сделать в файле web.config, находящемся в папке Views, без ущерба для безопасности ваших mvc-представлений asp.net. Это защитит файлы .cshtml, как обычно, но оставит ваши файлы .html в покое.
Изменить это
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
--to--
<add name="BlockViewHandler" path="*.cshtml" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
источник
Другой альтернативный вариант - вставить метод действия в любой из желаемых контроллеров для обслуживания файла html.
public ActionResult MyHtml() { var result = new FilePathResult("~/Views/HtmlPage1.html", "text/html"); return result; }
Получите доступ к html как http: // yoursite / controller / MyHtml . Вы можете расширить этот метод действия, чтобы принять имя файла HTML как параметр метода / запроса и отобразить файл во время выполнения, например, что-то вроде этого.
public ActionResult MyHtml(string htmlPageName) { var result = new FilePathResult($"~/Views/{htmlPageName}.html", "text/html"); return result; }
источник
Если вы планируете использовать внутреннюю папку просмотра, ответы выше должны быть лучшими, но этот ответ может быть полезен для пользователей, которые переходят на ядро asp.net mvc. Размещение файлов в wwwroot вместо папки просмотров должно облегчить доступ к вашим html-страницам как localhost / myfile.html
источник