为什么是ASP ?NET MVC4在路由中添加一个尾斜杠

本文关键字:一个 添加 ASP NET MVC4 路由 为什么 | 更新日期: 2023-09-27 17:53:38

我有一个区域在我的ASP。. NET MVC4应用程序,我注册在Global.asax。当我试图访问默认路由时:

whateverurl.tld/Area

ASP。NET MVC4添加了一个尾斜杠,使其看起来像:

whateverurl.tld/Area/

和Visual Studio 2012的嵌入式IIS服务器抛出404。

但是,如果我浏览到'whateverurl。tld/Area/Index',它会显示出来。我有另一个路由,它使用完全相同的默认路由(没有控制器名称),当我在浏览器中访问那个路由时,它会转到'whateverurl。tld/OtherArea'不带尾斜杠。如预期的那样,没有末尾的斜杠,就显示了控制器的索引。

这简直要把我逼疯了。每个区域的配置几乎相同。我可以想出一些变通办法,但我真的真的需要知道是什么导致了这种行为,以便在将来避免它。

区域1(不工作):

        context.MapRoute(
            "Area1_default",
            "Area1/{action}/{id}",
            new { controller = "Area1", action = "Index", id = UrlParameter.Optional }
        );

第2区(工作):

        context.MapRoute(
            "Area2_default",
            "Area2/{action}/{id}",
            new { controller = "Area2", action = "Index", id = UrlParameter.Optional }
        );

Global.asax.cs:

        Area1Registration aReg1 = new Area1Registration();
        AreaRegistrationContext a1c = new AreaRegistrationContext(aReg1.AreaName, RouteTable.Routes);
        aReg1.RegisterArea(a1c);
        Area2Registration aReg2 = new Area2Registration();
        AreaRegistrationContext a2c = new AreaRegistrationContext(aReg2.AreaName, RouteTable.Routes);
        aReg2.RegisterArea(a2c);

UPDATE:我使用了路由调试器来查看它匹配的路由。没有匹配的路线。不太清楚到底发生了什么。我无法获得路由调试信息显示,因为显然'/'是在路由匹配完成之前添加的。

为什么是ASP ?NET MVC4在路由中添加一个尾斜杠

Friends,

我在我的web根目录下有一个与该区域同名的目录。通过重命名解决了我的问题。这就解释了后面的斜杠-/表示它正在查看一个目录。

谢谢!

这应该可以解决这个问题。

RouteTable.Routes.AppendTrailingSlash = false;

放到你的Global.asax.