【发布时间】:2015-04-30 08:30:36
【问题描述】:
我有一个通用的基本控制器,它被其他一些控制器继承。
这个请求/InheritedController/{Action}是否有可能重定向到/Base/{Action}?
或者即使在执行了基本控制器中的代码之后,应用程序是否总是会尝试重定向到InheritedContoller/{Action}?
【问题讨论】:
标签: asp.net-mvc inheritance controller routes
我有一个通用的基本控制器,它被其他一些控制器继承。
这个请求/InheritedController/{Action}是否有可能重定向到/Base/{Action}?
或者即使在执行了基本控制器中的代码之后,应用程序是否总是会尝试重定向到InheritedContoller/{Action}?
【问题讨论】:
标签: asp.net-mvc inheritance controller routes
您将路由与简单继承混淆了。路由框架相当简单。给定默认路由{controller}/{action}/{id},它会从字面上找到一个具有该名称的控制器,将其更新,并尝试使用它拥有的任何其他请求数据对其调用操作。它既不知道也不关心这个类继承自基控制器。如果您想重定向到同名的基本控制器的操作,您需要在继承的控制器上覆盖此方法以进行重定向:
public class FooController : BaseController
{
public override ActionResult Bar()
{
return RedirectToAction("Bar", "Base");
}
}
public class BaseController
{
public virtual ActionResult Bar()
{
return View();
}
}
然后,当您转到/Foo/Bar 时,您将被重定向到/Base/Bar。然而,重要的是,这意味着您的基本控制器必须能够自行实例化——它不能是抽象的。
尽管如此,只是从孩子重定向到父母会让人质疑您为什么要首先继承。如果您想将某人发送到操作Base.Bar(),则只需使用 URL /Base/Bar 即可。
【讨论】: