Asp.net mvc 关于MVC路线的困惑

Asp.net mvc 关于MVC路线的困惑,asp.net-mvc,routes,Asp.net Mvc,Routes,下面的问题是什么 routes.MapRoute( "Default2", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = "test" } // Parameter defaults ); routes.MapRoute(

下面的问题是什么

    routes.MapRoute(
         "Default2", // Route name
         "{controller}/{action}/{id}", // URL with parameters
         new { controller = "Home", action = "Index", id = "test" } // Parameter defaults
     );

    routes.MapRoute(
         "Default1", // Route name
         "{controller}/{action}/{name}", // URL with parameters
         new { controller = "Home", action = "Report", name = "" } // Parameter defaults
     );
当我导航到/home/index“id”时,参数采用默认值“test”,但当我导航到home/report时,name参数为null


简而言之,如果路由定义是路由表中的第一个,则该参数将采用其默认值。但是下面的其他人没有。

这两个路由
{controller}/{action}/{id}
{controller}/{action}/{name}
是不明确的。它无法区分
/home/index/id
/home/report/abc
,它始终是路由定义中被捕获的第一条路由,因为在第二种情况下,它认为
id=“abc”

使用Phil Haack Routes调试器。。以更清楚地了解路线在不同路径上的反应


那么,我应该如何为参数指定默认值呢?我是否应该通过将{controller}参数更改为真实的控制器名称来为每个控制器创建不同的路由?还有其他方法吗?更改{controller}无效。必须为每个操作定义一个路由。