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 neu geschriebene URL im laufenden Betrieb berechnet wird. Ich kann keine statische Route 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 der FileRouteHandler.ProcessRequest
Methode kann ich den Pfad von /static/picture.jpg
nach umschreiben /a/b/c/picture.jpg
. Ich möchte dann einen Handler für statische Dateien erstellen. ASP.NET verwendet das StaticFileHandler
zu diesem Zweck. Leider ist diese Klasse intern. Ich habe versucht, den Handler mithilfe von 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 eigenen zu implementieren StaticFileHandler
, aber dies richtig zu tun (HTTP-Inhalte wie Bereiche und Etags zu unterstützen) ist nicht trivial.
Wie gehe ich beim Routing statischer Dateien in ASP.NET vor?