为什么ASP.NET MVC4向路由添加尾部斜杠?

时间:2014-03-26 21:21:44

标签: c# asp.net-mvc-4 visual-studio-2012

我在我的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 :我使用路由调试器来查看它匹配的路由。它不匹配任何路线。不太确定到底是怎么回事。我无法显示路线调试信息,因为显然是' /'在路线匹配完成之前添加。

2 个答案:

答案 0 :(得分:2)

我的网站根目录中有一个与该区域同名的目录。通过重命名解决了我的问题。这解释了尾随斜杠 - /意味着它正在查看目录。

谢谢!

答案 1 :(得分:1)

这应该解决它。

RouteTable.Routes.AppendTrailingSlash = false;

将其放入Global.asax。