使用管道分隔值的路径约束仅在MVC4中获取第一个值?

时间:2012-09-26 20:45:45

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

我很好奇为什么这条路线不起作用:

routes.MapRoute("Tracking",
                                    "{mailingId}/{subject}/{listItemId}/MailReport.{fileExtension}",
                                    new { controller = "Mailing", action = "OpenerImage", subject = UrlParameter.Optional },
                                    new
                                    {
                                        mailingId = new NonEmptyGuidRouteConstraint(),
                                        listItemId = new NonEmptyGuidRouteConstraint(),
                                        fileExtension = @"(aspx|php|asp|html|htm|json|xml)"
                                    });

fileExtensions参数只是拾取列表中的第一个参数,所以如果我到了一个带有.... / MailReport.php的页面,我会收到404错误。

更新:

我认为这更像是IIS问题,而不是路由问题。我认为IIS正试图在路由引擎之前解释扩展。只是一个想法,因为我也尝试创建自定义路由约束,它只适用于ASPX扩展。

1 个答案:

答案 0 :(得分:0)

我最终使用IIS URL Rewrite规则来处理这个问题。如果没有编写我自己的路由类(可能或可能不起作用)或处理程序,我认为这不可能

<强>更新

经过深入研究后,将其添加到web.config允许我绕过IIS的路由:

 <modules runAllManagedModulesForAllRequests="true" >
      <remove name="UrlRoutingModule"/>
    </modules>

这是system.webServer部分,我相信您必须以集成模式运行,否则将忽略此部分。