c# - MVC3 路由奇怪的行为

标签 c# asp.net-mvc asp.net-mvc-3

我发现路由有些奇怪...

我正在 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/

相关文章:

c# - 根据所选地点获取时区

c# - 通过 Entity Framework 获取 SQL View 返回不正确的结果

c# - 通过双击右键防止编辑 NSTextField

asp.net-mvc - 洋葱架构——服务层职责

asp.net-mvc-3 - MVC 删除记录,但如何在 Controller 中对此进行编码

asp.net-mvc-3 - DateTime 的问题,显示为 00 :00:00

c# - SteamVR在统一使用FFMPEG录制时创建加载屏幕闪烁

c# - 在 Linux 应用服务上为 IdentityServer4 提供 key

asp.net-mvc - ASP.NET MVC 中的本地化

c# - 如何在 ASP.Net MVC 中使用内连接编写 sql 查询?