【问题标题】:MVC Routing: route precedence not working as expectedMVC 路由:路由优先级未按预期工作
【发布时间】:2013-09-25 10:15:44
【问题描述】:

我研究了一个 MVC 示例,我有一个控制器 Home 和一个动作索引。

我有以下路由注册:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.MapRoute("MyRoute", "{controller}/{action}");

    routes.MapRoute("MyOtherRoute", "App/{action}",
        new { controller = "Home" });
}

据我了解,如果请求的路由不匹配(​​OR THE MATCH GIVES A NULL RESULT?!),框架将继续在其余路由中搜索...

例如,如果我将导航到/App/Index,我希望我将被重定向到Home 控制器的Index 方法。

确实如此,但仅在“MyRoute”被定义之后“MyOtherRoute”或“MyRoute”根本就没有了。但如前所述,我收到了HTTP 404

为什么会这样?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing


    【解决方案1】:

    经过一些研究发现MSDN

    当匹配发生时,不再评估路由。

    显然,该匹配是否给出结果没有区别......

    【讨论】:

      【解决方案2】:

      MVC 正在从顶部验证路由,您的第一条路由对/App/Index 有效。不检查路由是否指向现有的控制器/动作。
      您必须添加路线,以便更具体的路线位于开头,然后它将根据您的需要工作。

      【讨论】:

      • 从顶部匹配,但第一个匹配结果为空(App控制器不存在),所以它应该继续搜索?!
      • 不,MVC 不会继续搜索,它会像你得到的那样显示HTTP 404。只需更改顺序,它应该可以工作。
      • 正如我在问题中提到的,更改订单有效,所以这不是问题。对我来说,如果一次匹配没有得到结果,系统继续搜索匹配会更好......
      猜你喜欢
      • 1970-01-01
      • 2014-05-02
      • 2016-08-19
      • 2015-09-09
      • 1970-01-01
      • 2016-08-04
      • 2012-10-04
      • 1970-01-01
      相关资源
      最近更新 更多