IHttpContextAccessor HttpContext 始终为空

Posted

技术标签:

【中文标题】IHttpContextAccessor HttpContext 始终为空【英文标题】:IHttpContextAccessor HttpContext are always null 【发布时间】:2017-11-04 16:54:48 【问题描述】:

当我尝试从 IHttpContextAccessor 字段获取 httpcontext 时遇到问题,该字段始终为空。

这是我的startup.cs

    public void ConfigureServices(IServiceCollection services)
    
        // Add framework services.
        services.AddMvc();
        services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
    

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    
        .....

        // This is always null
        var httpContext = app.ApplicationServices.GetService<IHttpContextAccessor>().HttpContext;

        .....
    

【问题讨论】:

配置在应用启动时运行,而不是按请求运行。 【参考方案1】:

Configure 方法中的 HttpContext 始终为空。

此方法用于指定 ASP.NET 应用程序将如何响应 HTTP 请求并在应用程序启动时调用一次,而不是针对每个 HTTP 请求。这就是为什么什么都没有,可以填充到HttpContext

您需要在服务类中传递IHttpContextAccessor,并在请求处理期间调用IHttpContextAccessor.HttpContext。您可以通过在此 SO post 中获取 HTTP 上下文来查看“类似”情况。

【讨论】:

以上是关于IHttpContextAccessor HttpContext 始终为空的主要内容,如果未能解决你的问题,请参考以下文章

IHttpContextAccessor HttpContext 始终为空

从使用“dotnet new react -au Individual”创建的项目中通过“IHttpContextAccessor”访问用户信息?

如何在 ASP.NET Core 1.0 的 DI 中的 Startup 类中添加 IHttpContextAccessor?

ASP.NET Core获取客户端IP地址

.Net Core在类库中使用当前HttpContext

ASP.NET HttpContext 在 Azure 上为空