为什么是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:我使用了路由调试器来查看它匹配的路由。没有匹配的路线。不太清楚到底发生了什么。我无法获得路由调试信息显示,因为显然'/'是在路由匹配完成之前添加的。
Friends,
我在我的web根目录下有一个与该区域同名的目录。通过重命名解决了我的问题。这就解释了后面的斜杠-/表示它正在查看一个目录。
谢谢!
这应该可以解决这个问题。
RouteTable.Routes.AppendTrailingSlash = false;
放到你的Global.asax.