ASP.NET MVC Routing und statische Daten (dh. Bilder, Skripte, etc.)
-
30-09-2019 - |
Frage
Wenn ich eine Anforderung für eine Ressource in meinem ASP.NET MVC1 (oder 2) Web-App für eine statische Ressource, sagen wir ... ein Bild oder eine JavaScript-Datei oder eine CSS-Datei ... funktioniert das .NET-Framework versuchen und sehen, ob die Anforderung der Route Liste übereinstimmt ... und schließlich keinen Controller für sie finden kann?
zB.
Ressource: /Content/Images/Foo.png
Enthält diese Anforderung geht durch meine Routenliste .. nicht auf diese Anforderung keine Controller / Aktionen anzupassen und versuchen dann, diesen Weg direkt?
Lösung
Sie können wählen, ob eine vorhandene Datei abzubilden oder nicht die RouteCollection.RouteExistingFiles
Immobilien
Ruft einen Wert ab, der angibt, ob Routing ASP.NET sollte umgehen URLs, die eine vorhandene Datei entsprechen.
Hier ist, was wir lesen von hier :
das Routing-System immer noch Allerdings ist das Dateisystem überprüfen, um zu sehen, ob eine eingehende URL geschieht eine Datei oder einen Datenträger passen, und wenn ja, ignoriert das Routing der Anfrage (Umgehen alle Routeneinträge, dass die URL auch passen könnte), so dass die Datei direkt bedient werden. Dies ist sehr praktisch für statische Dateien, wie Bilder, CSS und JavaScript-Dateien. Du kannst halten sie in Ihrem Projekt (zum Beispiel in Ihrem / Content oder / Script Ordner), und dann Referenz- und dienen sie direkt, so als ob Sie nicht unter Verwendung an allen Routing. Da die Datei existiert wirklich auf der Festplatte erfolgt, dass die Priorität über Ihre Routing-Konfiguration.
Wenn stattdessen Sie Ihre Routing-Konfiguration hat Vorrang vor Dateien auf der Festplatte zu nehmen, können Sie einstellen, die RouteExistingFiles Eigenschaft auf true der Routecollection. (Es ist falsch standardmäßig aktiviert.)
Andere Tipps
Standardmäßig wird das Routing-Engine wird Route ignorieren Karten für alle Dateien, die physisch auf dem Server vorhanden. Kurz gesagt, müssen Sie nichts für ein MVC-App-Link zu statischen Dateien tun.
Sie können auch einen kleinen Trick in IIS tun. Ich speichere meine js, Bilder, CSS usw. im Content-Ordner unter dem virtuellen Verzeichnis.
Wenn Sie dann properties (in IIS-Manager) des Content-Ordner, erstellen Sie es als virtuelles Verzeichnis, dann die Wildcard-Mapping entfernen. Dann auf ein normales Verzeichnis des Content-Ordner zurück. Dies sollte dann aufhören Anfragen auf diese Dateien durch den aspnet_isapi Handler gehandhabt werden.