我同意@Tim 的观点,即您应该使用单个控制器。控制器是动作的逻辑分组;例如 Foo 的 CRUD 操作。 NerdDinner 就是一个很好的例子。
我不同意这些路线。你可以对路由做任何你想做的事情;但它应该对用户有意义。您可能只有一条类似于下面的包罗万象的路线。
routes.MapRoute("Default", //RouteName
"{controller}/{action}/{id}", //RouteUrl
new { //RouteDefaults
controller = "Home",
action = "Index",
id = UrlParameter.Optional}
)
您可以使用单个控制器获得所需的路线。
您想要的网址:
我的应用程序/主页
我的应用程序/摘要/prop1/prop2
myapp/Detail/prop1/prop2/prop3
控制器设置:
public class HomeController : Controller
{
public ActionResult Index() { ... }
public ActionResult Summary() { ... }
public ActionResult Details() { ... }
}
路由设置:
routes.MapRoute("Home-Index", //RouteName
"myapp/Home", //RouteUrl
new { //RouteDefaults
controller = "Home",
action = "Index"});
routes.MapRoute("Home-Summary", //RouteName
"myapp/Summary/prop1/prop2", //RouteUrl
new { //RouteDefaults
controller = "Home",
action = "Summary",
prop1 = UrlParameter.Optional,
prop2 = UrlParameter.Optional});
routes.MapRoute("Default", //RouteName
"{controller}/{action}/{id}", //RouteUrl
new { //RouteDefaults
controller = "Home",
action = "Index",
id = UrlParameter.Optional}
)
现在有一些重要的事情需要注意:
路由就像一个 switch 语句,第一个匹配的 url 是
它将使用的那个,这就是为什么您将包罗万象作为最后一个
一。
在您的地图路线中定义的 url 可以是任何您想要的。它
不必与控制器匹配,因为一旦删除
它使用默认值的占位符({controller} 等)
导航。所以 Home-Index 路由 url 可能是 myapp/foo/bar/baz
并且 id 仍会将您带到 Home 索引操作。
占位符自动工作。我找不到一个很好的资源来解释默认路由是如何工作的。
希望这会有所帮助。