来自具有构造方法的控制器的内部服务器错误

时间:2018-08-14 20:39:40

标签: c# asp.net

我是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" };
    }

但是当我实例化构造函数时,我得到了500响应。我想念什么?

控制器

[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" };
    }

业务逻辑

public class BusinessLogic
{
    private readonly Encryption _encryption;
    private readonly string UserID;
    private readonly string Password;

    public BusinessLogic(string Key, string Url, string UserId, string Password)
    {
        _encryption = new Encryption(Key);
        _UserID = UserId;
        _Password = Password;
    }

2 个答案:

答案 0 :(得分:1)

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

请查看Microsoft的article,了解有关依赖项注入的详细信息

总而言之,您必须创建一个接口IBusinessLogic,将其注册到实现BusinessLogic中,并由构造函数将接口注入控制器。

container.RegisterType<IBusinessLogic, BusinessLogic>();

答案 1 :(得分:0)

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