为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
阿波罗的战车 2021-11-28 17:58:07
我是 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 回答

?
MM们

TA贡献1886条经验 获得超2个赞

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

关于依赖注入的细节可以看微软的这篇文章

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

container.RegisterType<IBusinessLogic, BusinessLogic>();


查看完整回答
反对 回复 2021-11-28
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

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


查看完整回答
反对 回复 2021-11-28
  • 2 回答
  • 0 关注
  • 217 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信