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