ASP.Net路由(非MVC)可以用于提供静态文件吗?
比如说我想路由:
我希望您能够动态地进行翻译,即实时计算重写后的URL。我不能一劳永逸地设置静态路由。
无论如何,我可以创建以下路由:
在
比如说我想路由:
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.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);
但是使用内部类型似乎不是正确的解决方案。另一个选项是实现自己的StaticFileHandler
,但要做到正确(支持HTTP的范围和ETags等)是非常困难的。
我应该如何处理ASP.NET中静态文件的路由?