具有自定义基本控制器的控制器不工作

本文关键字:控制器 工作 自定义 | 更新日期: 2023-09-27 18:27:54

更新

试图澄清我的问题


我有一个ASP.NET 5 Web Api应用程序。我正在尝试创建一个使用自定义基本控制器的控制器类。一旦我向基本控制器添加构造函数,MVC就无法再找到在Generic类中定义的Get()端点。

这是有效的:

当我导航到/api/person时,Get()端点被触发,定义在Generic类中

通用:

public class Generic
{
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }
}

PersonController

[Route("api/[controller]")]
public class PersonController : Generic
{
}

这不起作用当我导航到/api/person时,Get()终点而不是触发。唯一添加的是Generic类和PersonController类中的构造函数。

public class Generic
{
    protected DbContext Context { get; set; }
    public Generic(DbContext context)
    {
        Context = context;
    }
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }
}

PersonController

[Route("api/[controller]")]
public class PersonController : Generic
{
    public PersonController(DbContext context) : base(context) { }
}

这是bug还是我做错了什么?

具有自定义基本控制器的控制器不工作

您的问题与从另一个基类继承无关。我认为问题是,DbContext的正确实现没有注入到构造函数中。由于asp.net 5是如此模块化/依赖性可注入,您需要显式配置它

在Startup.cs类的ConfigureServices方法中,注册DbContext服务,这样MVC就会使用它,并在需要时将其注入到类控制器中。

public void ConfigureServices(IServiceCollection services)
{
    services.AddEntityFramework()
        .AddDbContext<DbContext>();
    services.AddMvc();
}