Le routage ASP.Net (pas MVC) peut-il être utilisé pour servir des fichiers statiques ?
Disons que je veux acheminer
http://domain.tld/static/picture.jpg
à
http://domain.tld/a/b/c/picture.jpg
et je veux le faire de manière dynamique, c'est-à-dire que l'URL réécrite est calculée à la volée. Je ne peux pas mettre en place une route statique une fois pour toutes.
Quoi qu'il en soit, je peux créer un itinéraire comme celui-ci :
routes.Add(
"StaticRoute", new Route("static/{file}", new FileRouteHandler())
);
Dans le cadre de la FileRouteHandler.ProcessRequest
je peux réécrire le chemin de /static/picture.jpg
à /a/b/c/picture.jpg
. Je souhaite ensuite créer un gestionnaire pour les fichiers statiques. ASP.NET utilise la fonction StaticFileHandler
à cette fin. Malheureusement, cette classe est interne. J'ai essayé de créer le gestionnaire en utilisant la réflexion et cela fonctionne :
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);
Mais l'utilisation de types internes ne semble pas être la bonne solution. Une autre option est d'implémenter mon propre StaticFileHandler
mais le faire correctement (en prenant en charge les éléments HTTP tels que les plages et les balises) n'est pas une tâche triviale.
Comment dois-je aborder le routage des fichiers statiques en ASP.NET ?