可以在.net Core DLL中访问HttpContext.Items吗?

时间:2019-07-03 17:09:17

标签: asp.net-core .net-core

我正在使用.Net Core 2.1应用程序(Web API)。

我可以通过以下方式访问控制器内的HttpContext.Items["_logId"]

HttpContext.Items["_logId"] = generalRequest.LogId;

但是当我尝试通过.Net Core类库DLL访问它时:

 public class GeneralRequest
    {
        public string LogId => HttpContext.Items["_logId"];
        public string Body { get; set; }
        ...
    }

我收到错误消息:

  

无法访问非静态属性项目

enter image description here

在早期版本(非.Net Core)中,我们可以以静态方式访问项目。

问题

添加到Items的全部目的是使我们能够在请求中的任何地方读取它们。

如何从类库中读取HttpContext.Items

1 个答案:

答案 0 :(得分:2)

您需要通过构造器中的DI框架或asp.net核心自己的框架进行注入:

public class GeneralRequest 
{
    public GeneralRequest(IHttpContextAccessor httpContextAccessor)
    {
        this.LogId = httpContextAccessor.HttpContext.Items["_logId"];
    }
}

不要忘记将其添加到您的Startup.cs

 services.AddHttpContextAccessor();