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>
Другие вопросы по тегам