Co to jest route.IgnoreRoute („{zasób} .axd / {* pathInfo}”)


Odpowiedzi:


81

Pliki .axd nie istnieją fizycznie. ASP.NET używa adresów URL z rozszerzeniami .axd (ScriptResource.axd i WebResource.axd) wewnętrznie i są obsługiwane przez HttpHandler.

W związku z tym należy zachować tę regułę, aby uniemożliwić ASP.NET MVC próbę obsłużenia żądania zamiast pozwalać na to dedykowanemu HttpHandler.


5
Jestem prawie pewien, że chcesz, aby ludzie mogli pobierać „pliki axd” z Twojej witryny, ponieważ zawierają javascript i style.
Moulde

3
Ta odpowiedź jest nieprawidłowa. Powodem wprowadzenia IgnoreRoutekonfiguracji routingu MVC jest upewnienie się, że MVC nie próbuje obsłużyć żądania. Dzieje się tak, ponieważ .axdpunkty końcowe muszą być obsługiwane przez inną procedurę obsługi HTTP (procedurę, która nie jest częścią MVC), aby obsługiwać skrypty.
NightOwl888

1
Czy jest to całkowicie niepotrzebne w .NET core? Szukałem w Google przez około godzinę i nie mogę znaleźć żadnych odniesień do równoważnych kroków, więc zakładam, że po prostu nie są potrzebne.
Dinerdo

35

Trochę tła

Jeśli otworzysz ten plik:

%WINDIR%\Microsoft.NET\Framework\version\Config\Web.config

znajdziesz to w pliku:

<add path="WebResource.axd"
     verb="GET"
     type="System.Web.Handlers.AssemblyResourceLoader"
     validate="True" />

To jest po prostu informacja dla środowiska wykonawczego Asp.NET: „Hej, koleś asp.net, jeśli nadejdzie żądanie dotyczące WebResource.axd, użyj AssemblyResourceLoader do przetworzenia żądania”.

Proszę zauważyć, że WebResource.axd NIE jest plikiem, ale po prostu mapą (jeśli mogę tak powiedzieć) do AssemblyResourceLoader. Jest to nazwa, pod którą zarejestrowany jest przewodnik. Na moim komputerze znalazłem następujące programy obsługi .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" 

Ok, więc co robi ta obsługa?

AssemblyResourceLoaderWie jak szukać osadzonych plików w zespole więc może to służyć (wysyłanie go do klienta czyli przeglądarkę). Na przykład w formularzach internetowych asp.net, jeśli używasz formantów walidacji, zależą one od niektórych skryptów JavaScript, aby pokazać błędy na stronie sieci Web. Jednak ten javascript jest osadzony w zestawie. Przeglądarka potrzebuje javascript, więc zobaczysz to w html strony:

<script src="/YourSite/WebResource.axd?d=fs7zUa...&amp;t=6342..." type="text/javascript"></script>

AssemblyResourceLoaderZnajdzie zespół, gdzie JavaScript jest osadzony za pomocą informacji w ciągu kwerendy i zwróci JavaScript.


Wracając do pytania

A więc odpowiadając na pytanie, co to jest:

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

To mówi silnikowi routingu, że nie będziemy przetwarzać żądań, które pasują do tego wzorca trasy. Innymi słowy, nie będziemy przetwarzać .axdwniosków. Czemu? Ponieważ sama MVC jest podobna do HttpHandler .axdi .aspxwielu innych teleskopowe, które są w pliku web.config. Procedura obsługi MVC nie wie, jak przetworzyć żądanie, na przykład szuka zasobów osadzonych w zestawie - AssemblyResourceLoaderwie, jak to zrobić. MVC wie, jak to zrobić, cóż, wszystko, co robi, co wykracza poza zakres tego pytania i odpowiedzi.


2
To zdecydowanie zdecydowanie powinna być zaakceptowana odpowiedź, plus jedna ode mnie.
Yahya

Na koniec jasne wyjaśnienie tego, co faktycznie robi WebResource.axd, jednocześnie zapewniając jasną odpowiedź na pytanie. Dziękuję
ben_mj

18

Trasa ze wzorcem {zasób} .axd / {* pathInfo} jest dołączona, aby zapobiec przekazywaniu żądań dotyczących plików zasobów sieci Web, takich jak WebResource.axd lub ScriptResource.axd, do kontrolera.

Przeczytaj link: http://msdn.microsoft.com/en-us/library/cc668201%28v=vs.100%29.aspx

Możesz również określić, że routing nie powinien obsługiwać niektórych żądań adresów URL. Uniemożliwiasz routingowi obsługę niektórych żądań, definiując trasę i określając, że do obsługi tego wzorca powinna być używana klasa StopRoutingHandler . Gdy żądanie jest obsługiwane przez obiekt StopRoutingHandler, obiekt StopRoutingHandler blokuje wszelkie dodatkowe przetwarzanie żądania jako trasy. Zamiast tego żądanie jest przetwarzane jako strona ASP.NET, usługa sieci Web lub inny punkt końcowy ASP.NET. Możesz użyć metody RouteCollection.Ignore (lub RouteCollectionExtensions.IgnoreRoute dla aplikacji MVC), aby utworzyć trasy, które używają klasy StopRoutingHandler .



7

To nie są pliki (nie istnieją na dysku) - to tylko nazwy, pod którymi zarejestrowane są niektóre programy obsługi HTTP.


najbardziej trafna odpowiedź, którą powiedziałbym.
Sakthivel
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.