You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core中UserManager.GetUserAsync()报Guid格式错误求助

解决GetUserAsync(HttpContext.User)触发的Guid格式错误

问题场景

在.NET Core Web应用中,通过脚手架搭建账户及管理页面,AspNetUsers表中已存在ID为合法Guid的用户,但调用_userManager.GetUserAsync(HttpContext.User)时,持续抛出错误:

Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)

解决方案

  • 确认身份服务的用户ID类型配置
    在Program.cs(或Startup.cs)中,添加身份服务时需明确指定用户ID为Guid类型。如果使用默认IdentityUser,需改为泛型版本:

    services.AddDefaultIdentity<IdentityUser<Guid>>()
            .AddEntityFrameworkStores<ApplicationDbContext>();
    

    若使用自定义用户类,确保类继承自IdentityUser<Guid>,同时DbContext中的用户DbSet对应正确类型:

    public class ApplicationUser : IdentityUser<Guid> { }
    
    public class ApplicationDbContext : IdentityDbContext<ApplicationUser, IdentityRole<Guid>, Guid>
    {
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
            : base(options) { }
    }
    
  • 检查ClaimsPrincipal中的用户ID值
    在调用GetUserAsync前,先输出HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier),确认该值是符合格式的Guid字符串。若值为空或格式错误,需修正登录逻辑中Claims的生成:

    // 登录时添加正确的NameIdentifier Claim
    var user = await _userManager.FindByEmailAsync(model.Email);
    var claims = new List<Claim>
    {
        new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
        // 其他必要Claims
    };
    var identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
    await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(identity));
    
  • 验证数据库实体映射
    确认AspNetUsers表的Id字段类型为uniqueidentifier,且自定义用户类的Id属性为Guid类型,未被错误定义为字符串或其他类型。

内容的提问来源于stack exchange,提问作者Andrew Casey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 11:52:00