我在我的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 :我使用路由调试器来查看它匹配的路由。它不匹配任何路线。不太确定到底是怎么回事。我无法显示路线调试信息,因为显然是' /'在路线匹配完成之前添加。
答案 0 :(得分:2)
友
我的网站根目录中有一个与该区域同名的目录。通过重命名解决了我的问题。这解释了尾随斜杠 - /意味着它正在查看目录。
谢谢!
答案 1 :(得分:1)
这应该解决它。
RouteTable.Routes.AppendTrailingSlash = false;
将其放入Global.asax。