C# 具有构造函数方法的控制器出现内部服务器错误

C# 具有构造函数方法的控制器出现内部服务器错误,c#,asp.net,C#,Asp.net,我不熟悉ASP.NET和C 当我向一个没有构造函数的控制器方法发出GET请求时,我得到一个200响应。比如说, 不带构造函数的控制器 [Route("api/[controller]")] public class ApiController : Controller { protected static BusinessLogic BusinessLogic; [HttpGet] public IEnumerable<string> Get() {

我不熟悉ASP.NET和C

当我向一个没有构造函数的控制器方法发出GET请求时,我得到一个200响应。比如说,

不带构造函数的控制器

[Route("api/[controller]")]
public class ApiController : Controller
{
    protected static BusinessLogic BusinessLogic;

[HttpGet]
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }
[Route("api/[controller]")]
public class ApiController : Controller
{
    protected static BusinessLogic BusinessLogic;
    public ApiController(BusinessLogic businessLogic)
    {
        BusinessLogic = businessLogic;
    }

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

我认为您必须将您的服务注入控制器

有关依赖项注入的详细信息,请参阅Microsoft的这篇文章

总之,您必须创建接口
IBusinessLogic
,将其注册到实现
BusinessLogic
,并通过构造函数将接口注入控制器

container.RegisterType<IBusinessLogic, BusinessLogic>();
container.RegisterType();

静态业务对象是执行所需操作的非标准方式,但它是有效的,但需要方法中的互斥体才能实现线程安全。大多数人会通过构造函数中的依赖项注入在每个线程实例化业务对象,但500错误可能是因为没有依赖项注入框架来实例化和注入业务对象。请参阅Microsoft unity或castleWindsor。 200是
成功,但我不确定您是如何从Controller继承的,这是一个MVC类,而不是应该用于webapi方法的Apicontroller

“500响应”只是HTTP响应代码。引发的异常是什么?构造函数不是问题,问题是构造函数有一个必须由某个东西来实现的参数。您正在寻找?(旁注)-不要为BusinessLogic使用静态字段。您编写的代码必须是线程安全的,添加一个静态字段,然后在实例构造函数中分配该字段,并且该字段本身具有上下文敏感的字段,这将导致争用条件(bug)一旦您一次有超过1个用户访问应用程序。@I或者您也可以说明原因。老实说,显示的代码中有很多错误,并且没有足够的代码来理解您想要做什么。你的后续问题也非常广泛。我建议你找到一个关于asp.NETWebAPI的教程,有很多。首先(使用示例代码)遵循其中一条,然后再次尝试您的代码,看看它是否更有意义。我不想使用DI或IoC。我不想使用DI或IoC,有没有更简单的方法。有没有更简单的方法呢@Igor我是新手,还不了解这个概念。
container.RegisterType<IBusinessLogic, BusinessLogic>();