C# 为什么UserManager.GetUserAsync在使用JWT时返回null?

C# 为什么UserManager.GetUserAsync在使用JWT时返回null?,c#,.net,asp.net-core,.net-core,jwt,C#,.net,Asp.net Core,.net Core,Jwt,我的.NETCore2.1WebAPI有一些问题。Im使用Identity framework和JWT令牌进行身份验证,但每当我尝试获取控制器中的当前用户时,都会出现空引用错误 从我看到的情况来看,所有设置都很好,我尝试手动设置Identity的键,但仍然得到相同的错误。有什么想法吗 控制器: var user = await _userManager.GetUserAsync(User); Startup.cs: public void ConfigureServic

我的.NETCore2.1WebAPI有一些问题。Im使用Identity framework和JWT令牌进行身份验证,但每当我尝试获取控制器中的当前用户时,都会出现空引用错误

从我看到的情况来看,所有设置都很好,我尝试手动设置Identity的键,但仍然得到相同的错误。有什么想法吗

控制器:

        var user = await _userManager.GetUserAsync(User);
Startup.cs:

    public void ConfigureServices(IServiceCollection services)
    {
      services.AddIdentity<LoginUser, IdentityRole>(options => {
            options.ClaimsIdentity.UserIdClaimType = 
            ClaimTypes.NameIdentifier;
            })
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders();
    }
public void配置服务(IServiceCollection服务)
{
服务.附加性(选项=>{
options.ClaimsIdentity.UserIdClaimType=
ClaimTypes.NameIdentifier;
})
.AddEntityFrameworkStores()
.AddDefaultTokenProviders();
}
令牌生成中的声明:

        var claims = new List<Claim>
        {
            new Claim(JwtRegisteredClaimNames.Sub, user.Id),
            new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
            new Claim(JwtRegisteredClaimNames.Email, email),
            new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
        };
var索赔=新列表
{
新声明(JwtRegisteredClaimNames.Sub,user.Id),
新声明(ClaimTypes.NameIdentifier,user.Id.ToString()),
新索赔(JwtRegisteredClaimNames.Email,Email),
新声明(JwtRegisteredClaimNames.Jti,Guid.NewGuid().ToString())
};

无法真正解释为什么会发生这种情况,我想这是因为用户没有真正登录,因为JWT是无状态的

但是,由于以下代码片段,我成功地获得了当前用户:

private async Task<AppUser> GetUser()
        => await _userManager.FindByIdAsync(User.Claims.FirstOrDefault(c => string.Equals(c.Type, Constants.Strings.JwtClaimIdentifiers.Id, StringComparison.InvariantCultureIgnoreCase))?.Value);
private异步任务GetUser()
=>wait _userManager.FindByIdAsync(User.Claims.FirstOrDefault(c=>string.Equals(c.Type,Constants.Strings.jwtclaiminntifiers.Id,StringComparison.InvariantCultureIgnoreCase))?.Value);

当我尝试在System.Private.CoreLib中查找资源时出现异常:无限递归。这可能是System.Private.CoreLib中的错误,也可能是某些扩展点(如程序集解析事件或CultureInfo名称)中的错误。资源名称:Arg_nullreferenceexceptionId您用
JwtRegisteredClaimNames.Sub
替换了
Constants.Strings.jwtclaiminntifiers.Id