我在我的ASP.NET MVC4应用程序中注册Global.asax中有一个区域。每当我尝试访问的默认路由:为什么ASP.NET MVC4为路线添加尾部斜线?
whateverurl.tld/Area
ASP.NET MVC4增加了尾部斜杠它使得它看起来像:
whateverurl.tld/Area/
和Visual Studio 2012的嵌入式IIS服务器抛出回404.
但是,如果我浏览到'whateverurl.tld/Area/Index',它就会显示出来。我有另一条使用完全相同的默认路由(sans控制器名称)的路由,并且当我在浏览器中访问该路由时,它将转到'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:我用一个路由调试器来查看它匹配的路由。它不匹配任何路线。不确定到底发生了什么。我无法获取路由调试信息来显示,因为显然在路由匹配完成之前添加了“/”。
你是如何注册这些路线? – kheya
刚刚更新,应该提供更多信息 – NewToMS
@NewToMS我不知道你为什么得到这个斜杠,但只是为了尝试,如果你想在'context.MapRoute'中替换''Area1/{action}/{id }“,''Area1/{controller}/{action}/{id}”,' – Leron