我很好奇为什么这条路线不起作用:
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扩展。
答案 0 :(得分:0)
我最终使用IIS URL Rewrite规则来处理这个问题。如果没有编写我自己的路由类(可能或可能不起作用)或处理程序,我认为这不可能
<强>更新强>
经过深入研究后,将其添加到web.config允许我绕过IIS的路由:
<modules runAllManagedModulesForAllRequests="true" >
<remove name="UrlRoutingModule"/>
</modules>
这是system.webServer
部分,我相信您必须以集成模式运行,否则将忽略此部分。