天蓝色 Web 应用程序中 HttpContext 中的用户配置文件为空

Posted

技术标签:

【中文标题】天蓝色 Web 应用程序中 HttpContext 中的用户配置文件为空【英文标题】:User profile empty in HttpContext in azure web app 【发布时间】:2021-03-05 10:37:20 【问题描述】:

我正在通过身份提供者 Auth0 使用 Azure Web 应用服务。 我得到了这个工作,但是每当我登录托管在 azure 上的网站时,用户配置文件都不会加载到 HttpContext 中。 这在 IIS Express 中本地工作。 知道我可能缺少什么吗?

这是我获取登录用户配置文件的代码:

[Inject]
    private IHttpContextAccessor HttpContextAccessor  get; set; 
    private string loginId;

    /// <summary>
    /// On initialized
    /// </summary>
    /// <returns></returns>
    protected override async Task OnInitializedAsync()
    
        await LoadInvoiceTypes();
        this.loginId = HttpContextAccessor.HttpContext.User.Claims.FirstOrDefault(c => c.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier")?.Value;
    

我在网站上做了一些登录,似乎 HttpContext 为空。

提前致谢!

【问题讨论】:

【参考方案1】:

请先看看我的测试结果。

下面是我的测试代码。

public string test()

    var obj = _httpContextAccessor.HttpContext;
    this.loginId = _httpContextAccessor.HttpContext.User.Claims.FirstOrDefault(c => c.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier")?.Value;
        return loginId;

你可以通过gif看到我的测试结果。

我尝试在Startup.cs 中添加services.AddSingleton&lt;IHttpContextAccessor, HttpContextAccessor&gt;();

更多细节,你可以参考博客,它对我有用。

Accessing HTTPContext in ASP.NET Core

你也可以download my sample code to test it,希望我的回答可以帮助到你。

【讨论】:

嗨,Jason,感谢您的输入,但本地一切正常。当我发布到天蓝色时,HttpContext 是空的。【参考方案2】:

显然建议在 blazor 中使用 AuthenticationStateProvider。 正如我预期的那样,这为我提供了 azure 中的登录用户。

    protected string loginId;

    [Inject]
    private AuthenticationStateProvider AuthProvider  get; set; 

    protected override async Task OnInitializedAsync()
    
        var authState = await AuthProvider.GetAuthenticationStateAsync();
        this.loginId = authState.User.Claims.FirstOrDefault(c => c.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier")?.Value;
        await base.OnInitializedAsync();
    

感谢您的意见。

【讨论】:

我建议你下次提问的时候,把问题写清楚,发帖问题从头到尾都没有提到blazor,在回答的时候也提到了,这是非常不友好的。

以上是关于天蓝色 Web 应用程序中 HttpContext 中的用户配置文件为空的主要内容,如果未能解决你的问题,请参考以下文章

在 IIS 中运行 Web 应用程序时,HttpContext 为 NULL

如何在不使用 HttpContext 的情况下获取 Web 应用程序的当前配置?

ServiceStack - System.Web.HttpContext.Current.Session 为空

WebOperationContext.current 和 HttpContext.Current 之间的区别

更改 WCF Web Api HttpContext 响应

Web API - owin 中的 HttpContext.Current 问题,用于使用 moq 进行集成测试