Что routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
Я не могу найти ни одного файла .axd в своем проекте, могу ли я удалить это правило маршрута?
Ответы:
Файлы .axd физически не существуют. ASP.NET внутренне использует URL-адреса с расширениями .axd (ScriptResource.axd и WebResource.axd), и они обрабатываются HttpHandler.
Следовательно, вы должны соблюдать это правило, чтобы предотвратить попытки ASP.NET MVC обработать запрос вместо того, чтобы позволить выделенному HttpHandler сделать это.
IgnoreRoute
конфигурации маршрутизации MVC - убедиться, что MVC не пытается обработать запрос. Это связано с тем, что .axd
конечные точки должны обрабатываться другим обработчиком HTTP (обработчиком, который не является частью MVC) для обслуживания сценариев.
Немного фона
Если вы откроете этот файл:
%WINDIR%\Microsoft.NET\Framework\version\Config\Web.config
вы найдете это в файле:
<add path="WebResource.axd"
verb="GET"
type="System.Web.Handlers.AssemblyResourceLoader"
validate="True" />
Это в основном говорит среде выполнения Asp.NET: «Привет, чувак, asp.net, если приходит запрос на WebResource.axd, тогда используйте AssemblyResourceLoader для обработки запроса».
Обратите внимание, что WebResource.axd - это НЕ файл, а просто карта (если можно так сказать) AssemblyResourceLoader
. Это имя, под которым зарегистрирован обработчик. На своей машине я обнаружил следующие обработчики .axd:
<add path="eurl.axd" verb="*" type="System.Web.HttpNotFoundHandler" validate="True" />
<add path="trace.axd" verb="*" type="System.Web.Handlers.TraceHandler" validate="True" />
<add path="WebResource.axd" verb="GET" type="System.Web.Handlers.AssemblyResourceLoader" validate="True" />
<add verb="*" path="*_AppService.axd"
Итак, что делает этот обработчик?
Он AssemblyResourceLoader
знает, как искать встроенные файлы в сборке, чтобы обслуживать ее (отправлять клиенту, то есть браузеру). Например, в веб-формах asp.net, если вы используете элементы управления проверкой, они зависят от некоторого javascript для отображения ошибок на веб-странице. Однако этот javascript встроен в сборку. Браузеру нужен javascript, поэтому вы увидите это в HTML-коде страницы:
<script src="/YourSite/WebResource.axd?d=fs7zUa...&t=6342..." type="text/javascript"></script>
Он AssemblyResourceLoader
найдет сборку, в которую встроен javascript, используя информацию в строке запроса, и вернет javascript.
Вернуться к вопросу
Итак, чтобы ответить на вопрос, что это:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
Это говорит механизму маршрутизации, что мы не будем обрабатывать те запросы, которые соответствуют этому шаблону маршрута. Другими словами, мы не будем обрабатывать .axd
запросы. Зачем? Потому что сам по себе MVC является HttpHandler похож на .axd
и .aspx
и многие другие обработчик , которые находятся в файле web.config. Обработчик MVC не знает, как обрабатывать запрос, например искать встроенные ресурсы в сборке, - он AssemblyResourceLoader
знает, как это сделать. MVC знает, как это сделать, ну и все, что он делает, что выходит за рамки этого вопроса и ответа.
Маршрут с шаблоном {resource} .axd / {* pathInfo} включен для предотвращения передачи на контроллер запросов файлов веб-ресурсов, таких как WebResource.axd или ScriptResource.axd.
Ссылка для чтения: http://msdn.microsoft.com/en-us/library/cc668201%28v=vs.100%29.aspx
Вы также можете указать, что маршрутизация не должна обрабатывать определенные URL-запросы. Вы предотвращаете обработку определенных запросов маршрутизацией, определяя маршрут и указав, что для обработки этого шаблона следует использовать класс StopRoutingHandler . Когда запрос обрабатывается объектом StopRoutingHandler, объект StopRoutingHandler блокирует любую дополнительную обработку запроса как маршрута. Вместо этого запрос обрабатывается как страница ASP.NET, веб-служба или другая конечная точка ASP.NET. Вы можете использовать метод RouteCollection.Ignore (или RouteCollectionExtensions.IgnoreRoute для приложений MVC) для создания маршрутов, использующих класс StopRoutingHandler .
Взгляните на ссылку ниже: http://haacked.com/archive/2008/07/14/make-routing-ignore-requests-for-a-file-extension.aspx
Это не файлы (их нет на диске) - это просто имена, под которыми зарегистрированы некоторые обработчики HTTP.