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


Yanıtlar:


81

.axd dosyaları fiziksel olarak mevcut değildir. ASP.NET, dahili olarak .axd uzantılarına (ScriptResource.axd ve WebResource.axd) sahip URL'leri kullanır ve bunlar bir HttpHandler tarafından işlenir.

Bu nedenle, ASP.NET MVC'nin adanmış HttpHandler'ın bunu yapmasına izin vermek yerine isteği işlemeyi denemesini önlemek için bu kuralı korumalısınız.


5
Javascript ve stilleri içerdikleri için, insanların sitenizdeki "axd dosyalarını" indirebilmelerini isteyeceğinizden oldukça eminim.
Moulde

3
Bu cevap yanlış. MVC'nin IgnoreRouteyönlendirme yapılandırmasına koymanın nedeni, MVC'nin isteği yerine getirmeye çalışmamasını sağlamaktır. Bunun nedeni .axd, komut dosyalarına hizmet vermek için uç noktaların başka bir HTTP işleyicisi (MVC'nin parçası olmayan bir işleyici) tarafından işlenmesi gerektiğidir .
NightOwl888

1
.NET çekirdeğinde bu tamamen gereksiz mi? Google'da bir saat kadar aradım ve eşdeğer adımların ne olacağına dair herhangi bir referans bulamıyorum, bu yüzden bunun gerekli olmadığını varsayıyorum.
Dinerdo

35

Biraz Arka Plan

Bu dosyayı açarsanız:

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

bunu dosyanın içinde bulacaksınız:

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

Bu, temelde Asp.NET çalışma zamanını anlatmaktır: "Hey asp.net dostum, WebResource.axd için bir istek gelirse, isteği işlemek için AssemblyResourceLoader'ı kullanın."

Lütfen O notu WebResource.axd bir dosya değil (I derseniz) ama sadece bir harita AssemblyResourceLoader. İşleyicinin kayıtlı olduğu addır. Makinemde aşağıdaki .axd işleyicilerini buldum:

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

Tamam, peki bu işleyici ne yapıyor?

AssemblyResourceLoaderO hizmet (bir tarayıcı yani müşteriye göndermek) böylece bir montaj içinde gömülü dosyaları aramak için nasıl bilir. Örneğin, asp.net web formlarında, doğrulama kontrollerini kullanırsanız, web sayfasındaki hataları göstermek için bazı javascriptlere bağlıdırlar. Ancak, bu javascript bir derlemeye gömülüdür. Tarayıcının javascript'e ihtiyacı var, bu yüzden bunu sayfanın html'sinde göreceksiniz:

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

AssemblyResourceLoaderJavaScript sorgu dizesi bilgileri kullanarak gömülü olduğu montaj bulup javascript dönecektir.


Soruya Geri Dön

Öyleyse soruyu cevaplamak için nedir:

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

Bu, yönlendirme motoruna, bu yönlendirme modeliyle eşleşen istekleri işlemeyeceğimizi söylemektir. Başka bir deyişle, .axdtalepleri işleme koymayacağız. Neden? MVC kendisi benzer bir HttpHandler Çünkü .axdve .aspxweb.config dosyasında birçok diğer işleyicileri ve. MVC işleyicisi, bir derlemede gömülü kaynakları aramak gibi isteği nasıl işleyeceğini AssemblyResourceLoaderbilmez - bunu nasıl yapacağını bilir. MVC nasıl yapılacağını bilir, yaptığı her şey bu soru ve cevabın kapsamı dışındadır.


2
Bu kesinlikle kesinlikle kesinlikle kabul edilen cevap olmalı, artı benden.
Yahya

Son olarak, WebResource.axd'nin gerçekte ne yaptığına dair net bir açıklama ve aynı zamanda soruya net bir yanıt sağlar. Teşekkür ederim
ben_mj

18

{Resource} .axd / {* pathInfo} kalıbına sahip yol, WebResource.axd veya ScriptResource.axd gibi Web kaynak dosyalarına yönelik isteklerin bir denetleyiciye iletilmesini önlemek için dahil edilmiştir.

Bağlantıyı okuyun: http://msdn.microsoft.com/en-us/library/cc668201%28v=vs.100%29.aspx

Yönlendirmenin belirli URL isteklerini işlememesi gerektiğini de belirtebilirsiniz. Bir yol tanımlayarak ve bu modeli işlemek için StopRoutingHandler sınıfının kullanılması gerektiğini belirterek, yönlendirmenin belirli istekleri işlemesini engellersiniz . Bir istek ile ele alındığında StopRoutingHandler nesnesi, StopRoutingHandler nesne blokları bir yol olarak isteğe herhangi bir ek işlem. Bunun yerine, istek bir ASP.NET sayfası, Web hizmeti veya başka bir ASP.NET uç noktası olarak işlenir. Sen kullanabilirsiniz RouteCollection.Ignore (veya yöntemi RouteCollectionExtensions.IgnoreRoute kullanmak yolları oluşturmak için MVC uygulamaları için) StopRoutingHandler sınıfını.



7

Bunlar dosya değil (diskte mevcut değiller) - sadece bazı HTTP işleyicilerinin kayıtlı olduğu adlardır.


en alakalı cevap söyleyebilirim.
Sakthivel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.