相关疑难解决方法(0)

使用ASP.NET路由提供静态文件

可以使用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中静态文件的路由?

asp.net url-routing

71
推荐指数
4
解决办法
7万
查看次数

标签 统计

asp.net ×1

url-routing ×1