IgnoreRoute в ASP.MVC
-
21-09-2019 - |
Вопрос
Я пытаюсь получить доступ к файлу .js в каталоге представлений.У меня есть приложение MVC с /вивс/home/mycontrol.ascx У меня есть файл js /views/home/mycontrol.js
Я хочу сослаться на файл .js и сохранить его под контролем.Я попробовал следующие записи в маршрутизации, и ни одна из них не работает.
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("{file}.js");
routes.IgnoreRoute("{resource}.js/{*pathInfo}");
routes.IgnoreRoute("{controller}/{resource}.js/{*pathInfo}");
routes.IgnoreRoute("{*alljs}", new { alljs = @".*\.js(/.*)?" });
Пожалуйста, помогите, не предлагайте добавлять файл .js в каталог сценариев.Я хотел бы заставить это работать таким образом или знать, почему это невозможно сделать.
Я бы поместил скрипт на страницу, только в VS2010 B2 не работает отладка скрипта.
Спасибо, Крейг.
Решение
А Views
папка есть, ну для просмотров, а javascript надо ставить в другое место.Вот почему разработчики платформы MVC поместили web.config
в этом Views
папка, которая запрещает доступ к любому файлу внутри.Вы можете изменить эту настройку по умолчанию, но имейте в виду, что это может быть потенциальной дырой в безопасности.Итак, откройте web.config
файл, расположенный в папке Views
папка и:
Заменять:
<httpHandlers>
<add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
с:
<httpHandlers>
<add path="*.aspx" verb="*" type="System.Web.HttpNotFoundHandler"/>
<add path="*.master" verb="*" type="System.Web.HttpNotFoundHandler"/>
<add path="*.ascx" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
Перейдите к http://yoursite/Views/test.js
P.S.Вы также можете удалить все IgnoreRoutes
ты вставляешь global.asax
.
Другие советы
Разве это не было бы лучшим решением, используя Defaulthttphandler для HTML -ресурсов и поддержание Httpnotfoundhandler для всех других типов файлов
<httpHandlers>
<add path="*.html" verb="*" type="System.Web.DefaultHttpHandler"/>
<add path="*.*" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
На самом деле для интегрированного режима IIS вам нужно использовать System.Web.StaticHttpHandler
:
<httpHandlers>
<add path="*.css" verb="*" type="System.Web.StaticHttpHandler"/>
<add path="*.js" verb="*" type="System.Web.StaticHttpHandler"/>
<add path="*.*" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
Видимо System.Web.DefaultHttpHandler
работает только в классическом режиме IIS.
В MVC 4 мне пришлось обновить раздел обработчика, а также раздел httpHandlers.
Я обновил web.config в папке «Views» следующим образом.
<httpHandlers>
<add path="*.aspx" verb="*" type="System.Web.HttpNotFoundHandler"/>
<add path="*.cshtml" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
<handlers>
<remove name="BlockViewHandler" />
<add name="BlockViewHandlerRazor" path="*.cshtml" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
<add name="BlockViewHandlerAspx" path="*.aspx" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>