我会尽量提供一个不那么做作的例子。
ASP.NET MVC 中的路由被放入字典中,当有传入请求时,MVC 管道会查看请求并尝试确定将其路由到哪个 Controller 和 Action。
假设我有以下控制器:Home、Forum 和 Article
当我们这样做的时候,假设我有以下操作:Forum 和 Article 控制器上的View、Edit、Create。
这些大括号允许我为两者创建一条路线:
routes.MapRoute("Viewing",
{controller}/{action}/{id},
new {controller = "Article", action="" }, //The article controller has precedence
new { controller = "Article|Forum" } //contrived for this example
);
这些大括号意味着无论他们放入什么控制器(只要它是基于约束的Article 或Forum),相同的路由都可以工作。这使我不必为论坛和文章控制器中的每个操作都设置路由。
我可以轻松地创建两条路线:
routes.MapRoute("Articles",
article/{action}/{id},
new {controller = "Article" } //The article controller has precedence
);
routes.MapRoute("Forums",
forum/{action}/{id},
new { controller = "forum" }
);
但是那里有不需要的重复。
路线也是相当棘手的事情,按照这个顺序很重要。顶部路线将在底部路线之前进行评估。如果它与顶部路由的结构匹配,它将执行该操作,即使那不是正确的操作。
Phil Haack 有一个 Route Debugger 可以帮助解决这个问题。而且我还获取了他的源代码并对其进行了修改,以便您可以make it a control and put it on all your pages as a partial(希望您也将代码放在那里,只允许内部人员看到它)。