Что такое route.IgnoreRoute ("{resource} .axd / {* pathInfo}") - PullRequest
89 голосов
/ 26 января 2012

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

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

Ответы [ 5 ]

72 голосов
/ 26 января 2012

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

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

23 голосов
/ 09 июля 2017

Немного фона

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

%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, используя информацию в строке запроса, и вернет javascript.


Вернуться к вопросу

Итак, чтобы ответить на вопрос:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}")

Это говорит механизму маршрутизации, что мы не будем обрабатывать те запросы, которые соответствуют этому шаблону маршрута.Другими словами, мы не будем обрабатывать .axd запросов.Зачем?Поскольку MVC сам по себе является HttpHandler, похожим на .axd и .aspx и многими другими обработчиками, которые находятся в файле web.config.Обработчик MVC не знает, как обрабатывать запрос, например, искать встроенные ресурсы в сборке - AssemblyResourceLoader знает, как это сделать.MVC знает, как это сделать, и все, что он делает, выходит за рамки этого вопроса и ответа.

Здесь - отличная статья, в которой более подробно объясняется .axd.

18 голосов
/ 14 мая 2013

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

7 голосов
/ 22 апреля 2014

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

7 голосов
/ 26 января 2012
...