具有自定义基本控制器的控制器不工作
本文关键字:控制器 工作 自定义 | 更新日期: 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();
}