我发现路由有些奇怪...
我正在 Visual Studio Web Express 2012 中测试 MVC3 应用程序
- 我创建了一个新的 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>
然后这就是发生的事情:
当浏览器 URL 为:
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>
哪个可以
- 主页链接是:
但是单击“关于”链接后,浏览器 URL 为:
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>
- 主页链接变为:
如果我删除自定义路由,一切都会按预期工作
为什么会发生这种情况?
如何修复它?
最佳答案
我刚刚发现问题
基本上我读了几篇路由文章,最后我明白了,我的问题是我的自定义路由总是在我单击“关于”链接后被选取
为什么?
让我们考虑一下:
当我的 URL 为 http://localhost:54870/
时,我的自定义路由未被选取,因为我没有 {language} 和 {country} 的默认值,因此我的路由没有不匹配
但是当我的 URL 为 http://localhost:54870/Home/About
时,我的自定义路由总是被选中,因为路由引擎假设 Home/About 是 {language} 和 {country} 段,并且由于我有 {controller} 和 {action} 的默认值,所以路由只是匹配
好吧,我吸取了教训,并且了解了有关路由的更多信息。将来我计划遵循KISS principle when defining routes
关于c# - MVC3 路由奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12064752/