¿Se puede usar enrutamiento ASP.Net (no MVC) para servir archivos estáticos?Uso del enrutamiento ASP.NET para servir archivos estáticos
decir que quiero ruta
http://domain.tld/static/picture.jpg
a
http://domain.tld/a/b/c/picture.jpg
y quiero hacerlo de forma dinámica en el sentido de que la URL reescrito 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 el método FileRouteHandler.ProcessRequest
puedo reescribir el camino de /static/picture.jpg
a /a/b/c/picture.jpg
. Entonces quiero crear un controlador para archivos estáticos. ASP.NET utiliza el StaticFileHandler
para este fin. Desafortunadamente, esta clase es interna. He tratado de crear el controlador usando la reflexión y que 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 el uso de tipos internos no parece ser la solución adecuada. Otra opción es implementar mi propio StaticFileHandler
, 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?
Para mí funciona, pero no puedo analizar un archivo JS en una carpeta de visualización de un área. Para solucionarlo, uso en su lugar otra carpeta en la carpeta base del área como /Areas/MyArea/ClientScripts/foo.js – eka808
De alguna manera parece que me pierdo una pieza en el rompecabezas ... ¿cómo ayuda ignorar las rutas a sus archivos estáticos con el enrutamiento de '/ static' a'/a/b/c' (que solicitó OP)? ¿Podrían por favor arrojar más luz sobre su respuesta, realmente me gustaría entender esta solución? – Oliver
Acuerde con Oliver que esto NO responde al OP y no debe aceptarse como la solución. – dhochee