Я не могу найти какой-либо файл .axd в моем проекте, могу ли я удалить это правило маршрута?
Ответ 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...&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
.