IgnoreRoute в ASP.MVC
Я пытаюсь получить доступ к файлу.js в каталоге просмотров. У меня есть приложение MVC с /Views/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 нарушена только отладка скрипта.
Спасибо С уважением, Крейг.
4 ответа
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
PS Вы также можете удалить все 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>