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

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

    }


阿波罗的战车
浏览 218回答 2
2回答

MM们

我认为您必须将您的服务注入控制器关于依赖注入的细节可以看微软的这篇文章总之,您必须创建一个 interface&nbsp;IBusinessLogic,将它注册到一个实现中,BusinessLogic并通过构造函数将接口注入到控制器中。container.RegisterType<IBusinessLogic,&nbsp;BusinessLogic>();

胡说叔叔

静态业务对象是一种非标准的方式来做你想做的事,但它是有效的,但需要在方法中使用互斥锁来保证线程安全。大多数人会通过构造函数中的依赖注入每个线程实例化业务对象,但是500错误可能是因为没有依赖注入框架来实例化和注入业务对象。参见Microsoft unity或castleWindsor。200 是成功,但我不确定您是如何从 Controller 继承的,这是一个 MVC 类,而不是应该用于 webapi 方法的 Apicontroller。
打开App,查看更多内容
随时随地看视频慕课网APP