Відповіді:
Файли .axd фізично не існують. ASP.NET використовує URL-адреси з розширеннями .axd (ScriptResource.axd та WebResource.axd) всередині, і ними обробляється HttpHandler.
Тому слід дотримуватися цього правила, щоб ASP.NET MVC не намагався обробляти запит, а не дозволяти спеціальному HttpHandler це робити.
IgnoreRoute
в конфігурацію маршрутизації MVC полягає в тому, щоб MVC не намагався обробити запит. Це тому, що .axd
кінцеві точки повинні оброблятися іншим обробником HTTP (обробником, який не є частиною MVC), щоб обслуговувати сценарії.
Деякі передумови
Якщо ви відкриєте цей файл:
%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>
The AssemblyResourceLoader
Знайти вузол , де Javascript впроваджений використовуючи інформацію в рядок запиту і повертає JavaScript.
Повернутися до запитання
Отже, щоб відповісти на питання, що таке:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
Це говорить про механізм маршрутизації, що ми не будемо обробляти ті запити, які відповідають цьому шаблону маршруту. Іншими словами, ми не будемо обробляти .axd
запити. Чому? Оскільки сам MVC - це HttpHandler, подібний до .axd
та .aspx
та багатьох інших обробників, що знаходяться у файлі web.config. Обробник MVC не знає, як обробити запит, наприклад, шукати вбудовані ресурси в збірці - він AssemblyResourceLoader
знає, як це зробити. MVC вміє робити, добре все, що робить, що виходить за рамки цього питання та відповіді.
Маршрут із шаблоном {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.