1

I have a service like this:

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);


    }

and I add to startup

      services.AddScoped<ICurentUserService, CurentUserService>();

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

but when à used via dependency injection is all time null when I was logged.

I use asp.net core version 3.1.0

Thanks you for your help.

David Liang
  • 20,385
  • 6
  • 44
  • 70
all
  • 21
  • 1
  • 3
  • What sort of authentication system are you using? If you are using a JWT you need to specify that like here https://stackoverflow.com/questions/46112258/how-do-i-get-current-user-in-net-core-web-api-from-jwt-token – perustaja Sep 30 '22 at 02:18

2 Answers2

0

Can't explain why but this code works

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

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

In startup

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

source: github.com/jasontaylordev/CleanArchitecture/issues/119

0

In my case, what works for me was injecting the interface of the HttpContextAccessor (IHttpContextAccessor) inside my DI container and registering services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();