MVC路由是否寻找模式或名称

时间:2014-06-14 18:50:51

标签: asp.net-mvc routes

我想了解路线,但我很困惑。

问题很简单,默认值是否会影响选择哪个路由器,或者只是模式。

例如,请考虑以下内容

routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{startIndex}",
defaults: new { controller = "Home", action = "Index", startIndex = UrlParameter.Optional }
);

routes.MapRoute(
name: "About",
url: "{controller}/{action}/{startIndex}",
defaults: new { controller = "About", action = "Index", startIndex = UrlParameter.Optional }
);

无论最终结果是否相同,MVC是否每次都会选择第一个,因为URL:模式与请求匹配,因此忽略它们有不同的控制器?

1 个答案:

答案 0 :(得分:1)

路线选择使用模式匹配,并将选择第一个匹配模式。在您的示例中,您的第二条路线没有理由,因为第一条路线将匹配/about/...以及第二条路线,并导致调用相同的操作。如果需要具有相同基本模式的路径,模式中的值可能会影响您使用的控制器,则可以使用路由约束来帮助选择正确的路径或使用固定值并将路径放在默认路径之前。

 routes.MapRoute(
     name: "Contact",
     url: "/contact",
     defaults: new { controller = "about", action = "contactus", id = "" }
 );

 routes.MapRoute(
     name: "Help",
     url: "/help",
     defaults: new { controller = "about", action = "help", id = "" }
 );

routes.MapRoute(
    name: "Admin",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Admin", action = "Index", id= UrlParameter.Optional },
    constraints: new { controller = "(admin)|(orgadmin)" }
);

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{startIndex}",
    defaults: new { controller = "Home", action = "Index", startIndex = UrlParameter.Optional }
);