Verwenden des ASP.NET-Routings zum Bereitstellen statischer Dateien
Kann ASP.Net-Routing (nicht MVC) zum Bereitstellen statischer Dateien verwendet werden?
Angenommen, ich möchte routen
http://domain.tld/static/picture.jpg
zu
http://domain.tld/a/b/c/picture.jpg
und ich möchte es dynamisch in dem Sinne tun, dass die umgeschriebene URL im laufenden Betrieb berechnet wird. Ich kann eine statische Route nicht ein für alle Mal einrichten.
Wie auch immer, ich kann eine Route wie diese erstellen:
routes.Add(
"StaticRoute", new Route("static/{file}", new FileRouteHandler())
);
In demFileRouteHandler.ProcessRequest
Methode kann ich den Pfad von umschreiben/static/picture.jpg
zu/a/b/c/picture.jpg
. Ich möchte dann einen Handler für statische Dateien erstellen. ASP.NET verwendet dieStaticFileHandler
für diesen Zweck. Leider ist diese Klasse intern. Ich habe versucht, den Handler mit Reflection zu erstellen, und es funktioniert tatsächlich:
Assembly assembly = Assembly.GetAssembly(typeof(IHttpHandler));
Type staticFileHandlerType = assembly.GetType("System.Web.StaticFileHandler");
ConstructorInfo constructorInfo = staticFileHandlerType.GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, Type.EmptyTypes, null);
return (IHttpHandler) constructorInfo.Invoke(null);
Die Verwendung interner Typen scheint jedoch nicht die richtige Lösung zu sein. Eine andere Möglichkeit besteht darin, meine eigene zu implementierenStaticFileHandler
Aber es ist nicht trivial, dies richtig zu tun (Unterstützung von HTTP-Inhalten wie Ranges und Etags).
Wie gehe ich beim Routing statischer Dateien in ASP.NET vor?