使用ASP.NET路由提供静态文件(第2部分)

时间:2013-12-03 23:01:02

标签: c# asp.net asp.net-mvc routes

我遇到了类似的问题:Using ASP.NET routing to serve static files

在RouteConfig中,我添加了以下几行:

  

routes.Add(       “图像ABC”,新路线(“Images / abc / {* filename}”,新ImageRouteHandler(“abc”)));

     

routes.Add(       “图像XYZ”,新路线(“Images / xyz / {* filename}”,新ImageRouteHandler(“xyz”)));

我在ImageRouteHandler发现了一个相当不错的实现:http://www.phpvs.net/2009/08/06/aspnet-mvc-how-to-route-to-images-or-other-file-types/,我只是在ctor中添加了一个参数来构建物理路径......

约束:除了ABC或XYZ之外,我在Images中还有其他路径,我不想被路由。

注意:我使用的是{*filename},因此我可以参考多个细分...详情请见http://msdn.microsoft.com/en-us/library/cc668201%28v=vs.100%29.aspx#handling_a_variable_number_of_segments_in_a_url_pattern

问题:

  1. 我可以在1个单一语句中将这两个路由组合而不用 违反约束?也许使用一些正则表达式 例如Images/[abc|xyz]/...

  2. 这个职位很重要。低于或高于默认路由。

    routes.MapRoute(     名称:“默认”,     url:“{controller} / {action} / {id}”,     默认值:new {controller =“Home”,action =“Index”,id = UrlParameter.Optional} );

    • a)如果代码位于默认路由之上,则会陷入困境 RedirectToAction

    • b)如果代码位于默认路由下方,则不会 处理即时路由,例如Images/abc/img.jpg不会 已处理,但Images/abc/level1/level2/level3/img.jpg将会 处理

  3. 为什么呢?不知道。

1 个答案:

答案 0 :(得分:0)

修正:

  

routes.Add(“Images Specials”,new Route(“Images / {folder} / {* filename}”,null,new RouteValueDictionary {{“outgoing”,new ImageRouteConstraint()}},new ImageRouteHandler())       );