[英]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.