C# .NETCore—尝试将存储库添加到API控制器,但每次添加时,每个控制器方法都返回500错误
正如标题所说。我正在创建一个Web API,在我的API控制器中,我试图在构造函数中声明一个存储库。我成功地声明了它,但我试图在该控制器中调用的每个API方法都返回一个500错误。当我删除构造函数/存储库变量时,我没有任何问题 控制器C# .NETCore—尝试将存储库添加到API控制器,但每次添加时,每个控制器方法都返回500错误,c#,asp.net,asp.net-web-api,asp.net-web-api2,asp.net-core,C#,Asp.net,Asp.net Web Api,Asp.net Web Api2,Asp.net Core,正如标题所说。我正在创建一个Web API,在我的API控制器中,我试图在构造函数中声明一个存储库。我成功地声明了它,但我试图在该控制器中调用的每个API方法都返回一个500错误。当我删除构造函数/存储库变量时,我没有任何问题 控制器 [Route("api/[controller]")] public class TestController: Controller { private ITestRepository _testRepository; public TestCon
[Route("api/[controller]")]
public class TestController: Controller
{
private ITestRepository _testRepository;
public TestController(ITestRepository testRepository)
{
_testRepository= testRepository;
}
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
}
[路由(“api/[控制器]”)]
公共类TestController:控制器
{
私有ITestRepository测试存储库;
公共测试控制器(ITestRepository测试存储库)
{
_testRepository=testRepository;
}
[HttpGet]
公共IEnumerable Get()
{
返回新字符串[]{“value1”,“value2”};
}
}
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services
.AddMvcCore()
.AddJsonFormatters()
.AddApiExplorer();
services.AddScoped<ITestRepository , TestRepository >();
services.AddSwaggerGen();
}
public void ConfigureServices(IServiceCollection services)
{
services.AddMvcCore()
.AddJsonFormatters()
.AddApiExplorer();
services
.AddEntityFramework()
.AddInMemoryDatabase()
.AddDbContext<TestDbContext>(); // register a service
services.AddScoped<ITestRepository, TestRepository>();
services.AddSwaggerGen();
}
public class TestRepository : ITestRepository
{
// pass the registered service to the ctor
public TestRepository(TestDbContext testDbContext)
{
}
}
public void配置服务(IServiceCollection服务)
{
//添加框架服务。
服务
.AddMvcCore()
.AddJsonFormatters()文件
.AddApiExplorer();
services.addScope();
services.addswagggen();
}
我遗漏了什么吗?简短回答
我试图在构造函数中声明一个存储库。我成功地声明了它,但我试图在该控制器中调用的每个API方法都返回一个500错误。当我删除构造函数/存储库变量时,我没有任何问题
您可能需要进行以下两项更改之一:
public interface ITestRepository { }
public class TestRepository : ITestRepository { }
但是,如果构造函数接受参数,代码将抛出500错误
public class TestRepository : ITestRepository
{
public TestRepository(object someObject)
{
}
}
它与该构造函数一起抛出,因为调用services.addScope()
需要TestRepository
构造函数满足这两个条件之一
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services
.AddMvcCore()
.AddJsonFormatters()
.AddApiExplorer();
services.AddScoped<ITestRepository , TestRepository >();
services.AddSwaggerGen();
}
public void ConfigureServices(IServiceCollection services)
{
services.AddMvcCore()
.AddJsonFormatters()
.AddApiExplorer();
services
.AddEntityFramework()
.AddInMemoryDatabase()
.AddDbContext<TestDbContext>(); // register a service
services.AddScoped<ITestRepository, TestRepository>();
services.AddSwaggerGen();
}
public class TestRepository : ITestRepository
{
// pass the registered service to the ctor
public TestRepository(TestDbContext testDbContext)
{
}
}
首先,我们使用Microsoft.practices.Unity注册依赖组件,然后在使用它们的地方解析它们 在使用依赖关系之前,您尚未解决它
public class TestController: Controller
{
private ITestRepository _testRepository;
public TestController(ITestRepository testRepository)
{
_testRepository= testRepository;
}
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
}
公共类TestController:Controller
{
私有ITestRepository测试存储库;
公共测试控制器(ITestRepository测试存储库)
{
_testRepository=testRepository;
}
[HttpGet]
公共IEnumerable Get()
{
返回新字符串[]{“value1”,“value2”};
}
}
在这里注册:
DIContainer.Instance.RegisterType<ITagManager, TagManager>();
DIContainer.Instance.RegisterType();
我们在使用依赖项之前先解决它们
DIContainer.Instance.Resolve<ITagManager>().RetrieveTwitterTags();
DIContainer.Instance.Resolve().RetrieveTwitterTags();
确切的错误消息是什么?@CodeNotFound这只是一个500内部服务器错误。没有提供其他信息。我试图在控制器级别对其进行调试,但调试程序在崩溃之前甚至无法到达那里。您的存储库类是否具有无参数构造函数?给我们看代码?