Usando el enrutamiento de ASP.NET para servir archivos estáticos
¿Se puede usar el enrutamiento de ASP.Net (no MVC) para servir archivos estáticos?
Di que quiero enrutar
http://domain.tld/static/picture.jpg
a
http://domain.tld/a/b/c/picture.jpg
y quiero hacerlo dinámicamente en el sentido de que la URL reescrita se calcula sobre la marcha. No puedo configurar una ruta estática de una vez por todas.
De todos modos, puedo crear una ruta como esta:
routes.Add(
"StaticRoute", new Route("static/{file}", new FileRouteHandler())
);
En elFileRouteHandler.ProcessRequest
método puedo reescribir la ruta desde/static/picture.jpg
a/a/b/c/picture.jpg
. Entonces quiero crear un controlador para archivos estáticos. ASP.NET utiliza elStaticFileHandler
para este propósito. Desafortunadamente, esta clase es interna. He intentado crear el controlador utilizando la reflexión y realmente funciona:
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);
Pero usar tipos internos no parece ser la solución adecuada. Otra opción es implementar mi propiaStaticFileHandler
, pero hacerlo correctamente (admitir cosas HTTP como rangos y etags) no es trivial.
¿Cómo debo abordar el enrutamiento de archivos estáticos en ASP.NET?