我试图了解路线,但是非常困惑。
问题很简单,默认值会对选择哪个路由器有任何影响,还是仅仅是模式。
例如,考虑以下
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 }
);
不管最终结果是否相同,由于URL:
模式匹配请求,因此MVC每次都会简单地选择第一个,从而忽略它们具有不同的控制器吗?
路线选择使用模式匹配,并将选择第一个匹配模式。在您的示例中,没有理由选择第二条路线,因为第一条路线将与第二条路线匹配/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 }
);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句