ASP.NET MVC路由用于具有多个子目录的文件

时间:2010-08-18 15:27:53

标签: asp.net asp.net-mvc-2 routing

我需要设置一个文件处理程序来路由多个子目录,如tihs;

http://localhost/images/7/99/786936215595.jpg

我尝试将它放在global.asax文件中;

 routes.Add(
   "ImageRoute",
   new Route("covers/{filepath}/{filename}",
   new ImageRouteHandler()));

我正在使用此Question中的ImageHandler,如果您有一个子目录(即'/images/15/786936215595.jpg'),它会很有用,但是当您有多个目录时会失败。< / p>

我尝试设置一个通配符并且没有用(即'新路由(“覆盖/ {filepath} / * / {filename}”')

这是来自大型NAS的图像(想想像300万张图像)所以它不像我只能移动文件。

谢谢!

2 个答案:

答案 0 :(得分:3)

好好玩了很多玩游戏后我发现了如何让它发挥作用。

像这样改变路线定义;

 routes.Add(
     "ImageRoute",
     new Route("images/{*filepath}",
     new ImageRouteHandler()));

然后把它放在默认的MapRoute之后。重要的部分是文件路径之前的“*”,告诉MVC在此之后发送任何内容作为文件路径RouteData的一部分。所以在GetHttpHandler()方法中,我可以使用它来获取完整路径;

string fp = requestContext.RouteData.Values["filepath"] as string;

活泉!

答案 1 :(得分:0)

您不能将整个路径视为一个路径参数吗?像这样:

routes.Add(
    "ImageRoute",
    "/images/{path}",
    new { controller = "Image", action = "Image" }
);

然后访问ActionResult Image(string path) { }操作方法中的整个路径?