2013-09-25 86 views
1

我研究了一个MVC示例我有一个控制器Home和一个动作索引。MVC路由:路由优先级不按预期工作

我有以下路由登记:

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

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

我的理解,如果请求的路径不匹配(或MATCH给出了一个空的结果?!),该框架将继续在剩下的搜索的路线...

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

就是这样,但只有在“MyRoute”被定义为之后“MyOtherRoute”或“MyRoute”根本没有。但如前所述,我得到了HTTP 404

这是为什么?

回答

2

MSDN发现了一些研究后:

当发生匹配时,没有更多的路线进行评价。

显然,没有任何区别,如果那场比赛给了或不结果...

1

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

+0

它从顶部相匹配,但第一场比赛给出了一个空的结果(应用程序控制器不存在),因此它应该继续搜索?! – Serge

+0

不,MVC不会继续搜索,它会像显示HTTP 404一样。只是改变顺序,它应该工作。 – Raidri

+0

正如我在问题中提到的那样,更改订单的工作原理,所以这不是问题。对我而言,如果一旦没有比赛结果,系统会继续搜索匹配,这样会更好。 – Serge