Asp.net mvc MVC路由:路由优先级未按预期工作

Asp.net mvc MVC路由:路由优先级未按预期工作,asp.net-mvc,asp.net-mvc-4,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc 4,Asp.net Mvc Routing,我研究了一个MVC示例,我有一个控制器主页和一个动作索引 我有以下路由注册: public static void RegisterRoutes(RouteCollection routes) { routes.MapRoute("MyRoute", "{controller}/{action}"); routes.MapRoute("MyOtherRoute", "App/{action}", new { controller = "Home" }); }

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

我有以下路由注册:

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

    routes.MapRoute("MyOtherRoute", "App/{action}",
        new { controller = "Home" });
}
据我所知,如果请求的路由不匹配(或者匹配结果为空?!),框架将继续搜索其余路由

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

是这样的,但只有在“MyRoute”或“MyRoute”完全缺失之后才定义“MyRoute”。但正如前面介绍的,我得到了一个
htp404


为什么会这样?

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

在经过一些研究后发现:

当匹配发生时,将不再计算任何路由


显然,如果匹配结果与否没有区别…

它从顶部匹配,但第一个匹配结果为空(App controller不存在),因此它应该继续搜索?!不,MVC不会继续搜索,它会像你看到的那样显示
HTTP404
。只要改变顺序就行了。正如我在问题中提到的,改变顺序是有效的,所以这不是问题。对我来说,如果一旦一场比赛没有结果,系统继续搜索比赛会更好。。。