首页 > 解决方案 > ihttpcontextaccessor.httpcontext.user.findfirst(claimtypes.nameidentifier).value 为空

问题描述

我有这样的服务:

public class CurentUserService : ICurentUserService
{
    private readonly IHttpContextAccessor _httpContextAccessor;

    public string UserId { get; set; }


    public  CurentUserService(IHttpContextAccessor httpContextAccessor)
    {
        this._httpContextAccessor = httpContextAccessor;





        this.UserId = this._httpContextAccessor.HttpContext?.User?.FindFirstValue(ClaimTypes.NameIdentifier);


    }

我添加到启动

      services.AddScoped<ICurentUserService, CurentUserService>();

        //services.AddHttpContextAccessor();
        services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

但是当我登录时,通过依赖注入使用的 à 始终为空。

我使用 asp.net 核心版本 3.1.0

谢谢你的帮助。

标签: httpcontextasp.net-core-3.1asp.net-core-identity

解决方案


无法解释原因,但此代码有效

private readonly IHttpContextAccessor _httpContextAccessor;
    public CurrentUserService(IHttpContextAccessor httpContextAccessor)
    {

        _httpContextAccessor = httpContextAccessor;
        
    }
public string UserId => _httpContextAccessor.HttpContext?.User?.FindFirstValue(ClaimTypes.NameIdentifier);

在启动中

services.AddSingleton<ICurrentUserService, CurrentUserService>();
            services.AddHttpContextAccessor();

来源:github.com/jasontaylordev/CleanArchitecture/issues/119


推荐阅读