Antworten:
.axd-Dateien existieren physisch nicht. ASP.NET verwendet intern URLs mit .axd-Erweiterungen (ScriptResource.axd und WebResource.axd), die von einem HttpHandler verarbeitet werden.
Daher sollten Sie diese Regel beibehalten, um zu verhindern, dass ASP.NET MVC versucht, die Anforderung zu verarbeiten, anstatt dies vom dedizierten HttpHandler ausführen zu lassen.
IgnoreRoute
die Routing-Konfiguration von MVC besteht darin, sicherzustellen, dass MVC nicht versucht, die Anforderung zu verarbeiten. Dies liegt daran, dass .axd
Endpunkte von einem anderen HTTP-Handler (einem Handler, der nicht Teil von MVC ist) behandelt werden müssen, um Skripts bereitzustellen.
Einige Hintergrundinformationen
Wenn Sie diese Datei öffnen:
%WINDIR%\Microsoft.NET\Framework\version\Config\Web.config
Sie finden dies in der Datei:
<add path="WebResource.axd"
verb="GET"
type="System.Web.Handlers.AssemblyResourceLoader"
validate="True" />
Das sagt der Asp.NET-Laufzeit im Grunde: "Hey asp.net-Typ, wenn eine Anforderung für WebResource.axd eingeht, verwenden Sie AssemblyResourceLoader, um die Anforderung zu verarbeiten."
Bitte beachten Sie, dass WebResource.axd KEINE Datei ist, sondern lediglich eine Zuordnung (wenn ich sagen darf) zu AssemblyResourceLoader
. Dies ist der Name, unter dem der Handler registriert ist. Auf meinem Computer habe ich die folgenden .axd-Handler gefunden:
<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, was macht dieser Handler?
Sie AssemblyResourceLoader
wissen, wie man in einer Assembly nach eingebetteten Dateien sucht, damit diese bereitgestellt werden können (senden Sie sie an den Client, dh an einen Browser). Wenn Sie beispielsweise in asp.net-Webformularen die Validierungssteuerelemente verwenden, hängen diese von Javascript ab, um die Fehler auf der Webseite anzuzeigen. Dieses Javascript ist jedoch in eine Assembly eingebettet. Der Browser benötigt das Javascript, damit Sie dies im HTML-Code der Seite sehen können:
<script src="/YourSite/WebResource.axd?d=fs7zUa...&t=6342..." type="text/javascript"></script>
Sie AssemblyResourceLoader
finden die Assembly, in die das Javascript eingebettet ist, anhand der Informationen im Querystring und geben das Javascript zurück.
Zurück zur Frage
Um die Frage zu beantworten, was ist:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
Dies bedeutet für die Routing-Engine, dass wir die Anforderungen, die diesem Routenmuster entsprechen, nicht verarbeiten werden. Mit anderen Worten, wir werden keine .axd
Anfragen bearbeiten. Warum? Weil MVC selbst ein HttpHandler ist, der .axd
und .aspx
vielen anderen Handlern in der Datei web.config ähnlich ist . Der MVC-Handler weiß nicht, wie die Anforderung verarbeitet werden soll, z. B. das Suchen nach eingebetteten Ressourcen in einer Assembly. Er AssemblyResourceLoader
weiß, wie dies zu tun ist. MVC weiß, wie es geht, und alles, was es tut, geht über den Rahmen dieser Frage und Antwort hinaus.
Die Route mit dem Muster {resource} .axd / {* pathInfo} ist enthalten, um zu verhindern, dass Anforderungen für Webressourcendateien wie WebResource.axd oder ScriptResource.axd an einen Controller übergeben werden.
Link lesen: http://msdn.microsoft.com/en-us/library/cc668201%28v=vs.100%29.aspx
Sie können auch festlegen, dass das Routing bestimmte URL-Anforderungen nicht verarbeiten soll. Sie verhindern, dass das Routing bestimmte Anforderungen verarbeitet, indem Sie eine Route definieren und angeben , dass die StopRoutingHandler- Klasse zur Verarbeitung dieses Musters verwendet werden soll. Wenn eine Anforderung von einem StopRoutingHandler- Objekt verarbeitet wird, blockiert das StopRoutingHandler- Objekt jede zusätzliche Verarbeitung der Anforderung als Route. Stattdessen wird die Anforderung als ASP.NET-Seite, Webdienst oder anderer ASP.NET-Endpunkt verarbeitet. Mit der RouteCollection.Ignore- Methode (oder RouteCollectionExtensions.IgnoreRoute für MVC-Anwendungen) können Sie Routen erstellen, die die StopRoutingHandler- Klasse verwenden.
Schauen Sie sich den folgenden Link an: http://haacked.com/archive/2008/07/14/make-routing-ignore-requests-for-a-file-extension.aspx
Dies sind keine Dateien (sie existieren nicht auf der Festplatte) - es sind nur Namen, unter denen einige HTTP-Handler registriert sind.