Co jest routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
Nie mogę znaleźć żadnego pliku .axd w moim projekcie, czy mogę usunąć tę regułę trasy?
Odpowiedzi:
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.
IgnoreRoute
konfiguracji routingu MVC jest upewnienie się, że MVC nie próbuje obsłużyć żądania. Dzieje się tak, ponieważ .axd
punkty końcowe muszą być obsługiwane przez inną procedurę obsługi HTTP (procedurę, która nie jest częścią MVC), aby obsługiwać skrypty.
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?
AssemblyResourceLoader
Wie 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...&t=6342..." type="text/javascript"></script>
AssemblyResourceLoader
Znajdzie 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ć .axd
wniosków. Czemu? Ponieważ sama MVC jest podobna do HttpHandler .axd
i .aspx
wielu 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 - AssemblyResourceLoader
wie, jak to zrobić. MVC wie, jak to zrobić, cóż, wszystko, co robi, co wykracza poza zakres tego pytania i odpowiedzi.
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 .
Spójrz na poniższy link: http://haacked.com/archive/2008/07/14/make-routing-ignore-requests-for-a-file-extension.aspx
To nie są pliki (nie istnieją na dysku) - to tylko nazwy, pod którymi zarejestrowane są niektóre programy obsługi HTTP.