asp.net MVC 将继承控制器的操作重定向到通用基础控制器视图

asp.net MVC Redirect actions from inherited controllers to generic base controller views

我有一个被其他一些控制器继承的通用基础控制器。

这个请求 /InheritedController/{Action} 是否有可能重定向到 /Base/{Action}

或者应用程序是否会始终尝试重定向到 InheritedContoller/{Action},即使在执行了基本控制器中的代码之后也是如此?

您将路由与简单继承混淆了。路由框架相当简单。给定默认路由 {controller}/{action}/{id},它将从字面上找到一个具有该名称的控制器,将其新建,并尝试使用它拥有的任何其他请求数据调用其上的操作。它既不知道也不关心这个 class 是从一个基本控制器继承的。如果你想重定向到同名的基本控制器的操作,你需要在继承的控制器上重写这个方法来做重定向:

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 就可以了。