可以使用ASP.Net路由(不是MVC)来提供静态文件吗?
说我要路线
http://domain.tld/static/picture.jpg
至
http://domain.tld/a/b/c/picture.jpg
并且我想动态地执行它,因为重写的URL是动态计算的。我不能一劳永逸地建立静态路由。
无论如何,我可以创建这样的路线:
routes.Add(
"StaticRoute", new Route("static/{file}", new FileRouteHandler())
);
在该FileRouteHandler.ProcessRequest
方法中,我可以重写从/static/picture.jpg
到的路径/a/b/c/picture.jpg
。然后,我想为静态文件创建一个处理程序。ASP.NETStaticFileHandler
为此使用了。不幸的是,该类是内部的。我试图使用反射创建处理程序,它实际上可以工作:
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);
但是使用内部类型似乎不是正确的解决方案。另一个选择是实现自己的实现StaticFileHandler
,但是正确地做到这一点(支持范围和etags等HTTP东西)并非易事。
如何在ASP.NET中处理静态文件的路由?