如果操作不存在,则路由到不同的控制器和操作

时间:2012-11-30 10:35:17

标签: c# routing asp.net-web-api

我目前有2个控制器,MemberController和Admincontroller,如果我像下面这样使用它(不同的动作),它工作正常:

http://localhost/member/delete/ME222 
http://localhost/admin/view/AD321

我的路线配置如下:

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

但是现在我已经为Member和Admin创建了一个共享操作(详细信息),我将它放在我的SharedController中,并希望像这样访问它:

http://localhost/member/detail/ME222
http://localhost/admin/detail/AD321

当我点击上面的url时,Admin-和MemberController中不存在该动作。

如果控制器(成员或管理员)中的当前当前操作不存在,如何路由上述内容以转到SharedController的操作? (不仅是详细操作,还包括所有不存在的操作)

由于 大卫

2 个答案:

答案 0 :(得分:0)

您需要确保操作始终存在...也许您可以为控制器创建基类。

然后在基本动作中你可以简单地返回:

this.RedirectToAction("action", "controller");

将此指向共享控制器上的相关操作。

答案 1 :(得分:0)

如果您对两个控制器都有共同的操作,则可以创建UserController,它将是MemberAdmin控制器的基类。然后,您可以将所有常见操作放在UserController中,它应该可以正常工作。
如果要覆盖某些内容(或者例如为每个角色添加具有不同属性的标记操作),您可以将操作设置为虚拟,然后在子类中覆盖它。