【问题标题】:Common Index Action for all controller所有控制器的通用索引操作
【发布时间】:2019-04-14 01:33:05
【问题描述】:

目前要返回视图,我必须在所有控制器中编写一种方法。那就是“索引”操作方法。除了返回各自的观点之外,没有任何关系。

那么有可能让它们变得通用吗?

我继承了一个从 apicontroller 继承的通用 basecontroller。那么有没有一种方法可以编写基本索引方法。如果需要,我也可以覆盖它?

【问题讨论】:

  • 我会选择KISS-principle。只需复制代码。这更明显。你已经注意到了缺点:AmbiguousActionException

标签: asp.net asp.net-mvc asp.net-core asp.net-core-mvc asp.net-mvc-routing


【解决方案1】:

你可以像这样创建一个 BaseController 类:

  public class BaseController : Controller
    {
        public virtual IActionResult Index()
        {
            return View();
        }
    }

然后从基本控制器继承你的控制器类:

public class CustomersController : BaseController
    {

    }

您可以像这样覆盖 Index 方法:

 public class HomeController : BaseController
{
    public override IActionResult Index()
    {

        return View("About");
    }
}

【讨论】:

  • 导致以下错误:AmbiguousActionException:多个动作匹配。以下操作匹配路由数据并满足所有约束: MyAppNamespace.Controllers.HomeController.Index (MyAppName) MyAppNamespace.Controllers.HomeController.Index (MyAppName)
  • 如果您从控制器基类继承,您必须从 HomeController 类中删除 Index 方法,或者您必须在 Index 方法中使用 override 关键字
  • 我从家庭控制器类中删除了。仍然给我这个错误。
  • 您是否在应用程序中使用 MVC 区域?
  • BaseController 这个名字相当混乱:docs.microsoft.com/nl-nl/aspnet/core/web-api/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多