繁体   English   中英

为什么ASP.NET MVC4在路由中添加斜杠?

[英]Why is ASP.NET MVC4 adding a trailing slash to a route?

我在Global.asax中注册的ASP.NET MVC4应用程序中有一个Area。 每当我尝试在以下位置访问默认路由时:

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);

更新 :我使用了路由调试器来查看它匹配的路由。 没有匹配的路线。 不确定到底发生了什么。 我无法显示路由调试信息,因为显然在路由匹配完成之前添加了“ /”。

朋友们,

我在Web根目录中有一个与该区域同名的目录。 通过重命名解决了我的问题。 这说明了斜杠-/表示它正在查看目录。

谢谢!

这应该解决它。

RouteTable.Routes.AppendTrailingSlash = false;

将其放在您的Global.asax中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM