【问题标题】:Can HttpContext.Items be access in .net Core DLL?可以在 .net Core DLL 中访问 HttpContext.Items 吗?
【发布时间】:2019-07-04 01:15:23
【问题描述】:

我正在使用 .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; }
        ...
    }

我得到一个错误:

无法访问非静态属性项

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

问题

添加到Items 的全部意义在于,我们将能够在请求中随处读取它们。

如何从类库中读取HttpContext.Items

【问题讨论】:

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


    【解决方案1】:

    您需要通过您的 DI 框架或 asp.net cores 自己的框架在构造函数中注入:

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

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

     services.AddHttpContextAccessor();
    

    【讨论】:

    • GeneralRequest 是一个响应自定义类型,我必须自己new .... 我必须注入IHttpContextAccessor 才能解决它吗?
    • 我猜构造函数注入是你要走的路。如果您不想这样做,您总是可以解决在您的 Web 应用程序中读取 logId 并将具体值传递给您的 GeneralRequest 类。这将为您节省依赖
    猜你喜欢
    • 2019-08-06
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    相关资源
    最近更新 更多