我有一个通用的基本控制器,由其他一些控制器继承。
此请求/InheritedController/{Action}
是否可能重定向到/Base/{Action}
?
或者,即使执行了基本控制器中的代码,应用程序是否也会尝试重定向到InheritedContoller/{Action}
?
答案 0 :(得分:2)
您使用简单的继承混淆了路由。路由框架相当简单。给定默认路由{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()
,请使用网址/Base/Bar
并完成操作。