【发布时间】:2015-07-08 18:09:15
【问题描述】:
假设您需要在 RESTful 路由中包含这些 URL:
/Company/About
/Company/Product/View
/Company/Product/Edit
/Company/Contact/View
/Company/Contact/Edit
我假设所有这些操作都需要在同一个控制器(即公司)中,并且我还假设路由在 Global.asax 中看起来像这样:
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapRoute("mission", "Company/Product/{action}/{id}",
new { controller = "Company", id = "" });
routes.MapRoute("mission", "Company/Contract/{action}/{id}",
new { controller = "Company", id = "" });
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);
}
当试图将所有这些都塞进一个控制器时就会出现问题(而且,我再次假设将所有这些都放在同一个控制器中是正确的),因为控制器动作名称会搞砸一切。这就是我的意思:
在本例中,我们需要在 Company 控制器中命名如下控制器操作:
About (for Company/About)
ProductView (for /Company/Product/View)
ProductEdit (for /Company/Product/Edit)
ContactView (for /Company/Contact/View)
ContactEdit (for /Company/Contact/Edit)
但是,这些操作名称与路由表所期望的不匹配。例如,如果用户浏览到 /Company/Product/View,则路由将直接流向 Company 控制器中名为“View”的操作。如果用户浏览到 /Company/Contact/View 怎么办?路由会将流路由到公司控制器中的相同“视图”表。如何将这些请求路由到不同的视图?
你会如何解决这个问题?我的目标是尽可能的 RESTful。
【问题讨论】:
-
/Company/Contact/Edit通常会建议您使用名为Area的Company
标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4