【发布时间】:2010-11-12 02:15:33
【问题描述】:
可以使用 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.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,但正确地实现(支持范围和 etag 等 HTTP 内容)并非易事。
我应该如何在 ASP.NET 中处理静态文件的路由?
【问题讨论】:
标签: asp.net url-routing