Що таке маршрути.IgnoreRoute (“{ресурс} .axd / {* pathInfo}”)


Відповіді:


81

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

Тому слід дотримуватися цього правила, щоб ASP.NET MVC не намагався обробляти запит, а не дозволяти спеціальному HttpHandler це робити.


5
Я майже впевнений, що ви хотіли б, щоб люди могли завантажувати "файли axd" на ваш сайт, оскільки вони містять javascript та стилі.
Moulde

3
Ця відповідь неправильна. Причина введення IgnoreRouteв конфігурацію маршрутизації MVC полягає в тому, щоб MVC не намагався обробити запит. Це тому, що .axdкінцеві точки повинні оброблятися іншим обробником HTTP (обробником, який не є частиною MVC), щоб обслуговувати сценарії.
NightOwl888

1
Це абсолютно непотрібно в ядрі .NET? Я шукав у Google близько години або близько того, і я не можу знайти жодних посилань на те, що було б еквівалентними кроками, тому я вважаю, що це просто не потрібно.
Дінердо

35

Деякі передумови

Якщо ви відкриєте цей файл:

%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>

The AssemblyResourceLoaderЗнайти вузол , де Javascript впроваджений використовуючи інформацію в рядок запиту і повертає JavaScript.


Повернутися до запитання

Отже, щоб відповісти на питання, що таке:

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

Це говорить про механізм маршрутизації, що ми не будемо обробляти ті запити, які відповідають цьому шаблону маршруту. Іншими словами, ми не будемо обробляти .axdзапити. Чому? Оскільки сам MVC - це HttpHandler, подібний до .axdта .aspxта багатьох інших обробників, що знаходяться у файлі web.config. Обробник MVC не знає, як обробити запит, наприклад, шукати вбудовані ресурси в збірці - він AssemblyResourceLoaderзнає, як це зробити. MVC вміє робити, добре все, що робить, що виходить за рамки цього питання та відповіді.


2
Це, безумовно, безумовно, має бути прийнятою відповіддю, плюс одна моя.
Yahya

Нарешті, чітке пояснення того, що насправді робить WebResource.axd, одночасно надаючи чітку відповідь на запитання. Дякую
ben_mj

18

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

Це не файли (вони не існують на диску) - це просто імена, під якими реєструються деякі обробники HTTP.


найбільш відповідна відповідь, яку я б сказав.
Sakthivel
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.