Что такое route.IgnoreRoute( "{resource}.axd/{* pathInfo}" )

Что такое routes.IgnoreRoute("{resource}.axd/{*pathInfo}")

Я не могу найти какой-либо файл .axd в моем проекте, могу ли я удалить это правило маршрута?

Ответ 1

Файлы

.axd не существуют физически. ASP.NET использует URL-адреса с расширениями .axd(ScriptResource.axd и WebResource.axd) внутри, и они обрабатываются HttpHandler.

Поэтому вы должны сохранить это правило, чтобы предотвратить попытку ASP.NET MVC обрабатывать запрос вместо того, чтобы позволить выделенному HttpHandler сделать это.

Ответ 2

Маршрут с шаблоном {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.

Ответ 4

Это не файлы (они не существуют на диске) - это просто имена, под которыми зарегистрированы некоторые обработчики HTTP.

Ответ 5

Немного фона

Если вы откроете этот файл:

%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...&amp;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.