【问题标题】:ihttpcontextaccessor.httpcontext.user.findfirst(claimtypes.nameidentifier).value is nullihttpcontextaccessor.httpcontext.user.findfirst(claimtypes.nameidentifier).value 为空
【发布时间】:2020-05-23 10:56:07
【问题描述】:

我有这样的服务:

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 core 3.1.0版

感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

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

    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

    【讨论】:

    • 这段代码有效吗?这对我不起作用!
    • 我的 startup.cs services.AddSingleton(); services.AddHttpContextAccessor();
    • 如果您使用了该 GitHub 存储库中提到的代码,那么您需要稍微更改代码,如答案:stackoverflow.com/a/66079005/3811265
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-29
    • 2018-03-11
    • 2015-04-22
    • 2020-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多