1

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

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 扩展。

4

1 回答 1

0

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

更新:

经过进一步研究,将其添加到 web.config 允许我绕过 IIS 的路由:

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

这在该system.webServer部分中,我相信您必须在集成模式下运行,否则该部分将被忽略。

于 2012-10-01T23:41:55.103 回答