我发现路由奇怪......
我在Visual Studio Web Express 2012中测试MVC3应用程序
我在默认路由之前添加了以下路由:
routes.MapRoute(
"default_localization",
"{language}/{country}/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
然后没有任何其他更改(创建项目后没有任何区域只是初始文件),我运行应用程序,乍一看一切正常。由于它是一个新的应用程序,页面顶部有两个链接:
动作链接如下:
<li>@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("About", "About", "Home")</li>
然后就是这样:
当浏览器网址为:http://localhost:54870/
http://localhost:54870/
http://localhost:54870/Home/About
HTML
<li><a href="/">Home</a></li>
<li><a href="/Home/About">About</a></li>
哪个没关系
但点击了“关于”链接后,浏览器网址为:http://localhost:54870/Home/About
http://localhost:54870/Home/About
http://localhost:54870/Home/About/Home/About
即使链接搞砸了,他们仍然会执行正确的操作。
HTML
<li><a href="/Home/About">Home</a></li>
<li><a href="/Home/About/Home/About">About</a></li>
如果我删除自定义路由,一切都按预期工作
为什么会这样?
我该如何解决?
答案 0 :(得分:2)
我刚发现问题
基本上我读了几篇路线文章,最后我知道了,我的问题是我的自定义路线被选中总是在我点击关于链接后
为什么?
让我们考虑一下:
当我的网址为http://localhost:54870/
时,我的自定义路由未被提取,因为我没有{language}和{country}的默认值,因此我的路线不匹配
但当我的网址为http://localhost:54870/Home/About
时,我的自定义路由始终被选中,因为路由引擎认为Home / About是{language}和{country} segments < / em>因为我有{controller}和{action}的默认值,所以溃败只是匹配
嗯,我吸取了教训,并且学到了更多关于路由的知识。将来我打算遵循KISS principle when defining routes
答案 1 :(得分:0)
尝试使用以下内容替换您的路线:
routes.MapRoute(
"default_localization",
"{language}/{country}/{controller}/{action}/{id}",
new { language = "en", country = "US", controller = "Home", action = "Index", id = UrlParameter.Optional }
);
看看是否有效。
希望这对你有所帮助。