Что такое routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
Я не могу найти какой-либо файл .axd в моем проекте, могу ли я удалить это правило маршрута?
Что такое routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
Я не могу найти какой-либо файл .axd в моем проекте, могу ли я удалить это правило маршрута?
.axd не существуют физически. ASP.NET использует URL-адреса с расширениями .axd(ScriptResource.axd и WebResource.axd) внутри, и они обрабатываются HttpHandler.
Поэтому вы должны сохранить это правило, чтобы предотвратить попытку ASP.NET MVC обрабатывать запрос вместо того, чтобы позволить выделенному HttpHandler сделать это.
Маршрут с шаблоном {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.
Немного фона
Если вы откроете этот файл:
%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, используя информацию в querystring и возвращает javascript.
Вернуться к вопросу
Итак, чтобы ответить на вопрос, что есть:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
Это говорит движку маршрутизации, что мы не будем обрабатывать те запросы, которые соответствуют этому шаблону маршрута. Другими словами, мы не будем обрабатывать запросы .axd
. Зачем? Поскольку MVC сам по себе является HttpHandler, похожим на .axd
и .aspx
, и многими другими обработчиками, которые находятся в файле web.config. Обработчик MVC не знает, как обрабатывать запрос, например, искать встроенные ресурсы в сборке - AssemblyResourceLoader
знает, как это сделать. MVC знает, как это сделать, и все, что он делает, что выходит за рамки этого вопроса и ответа.
Here - это отличная статья, в которой более подробно описывается .axd
.