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

.NET Core 2.1 API中GetRolesAsync()返回空角色的原因排查

解决GetRolesAsync()返回空角色的问题

1. 调整Identity服务注册顺序

在.NET Core 2.1中,AddIdentity必须在AddAuthentication之前注册,因为AddIdentity会初始化身份认证相关的基础服务,顺序颠倒会导致UserManager无法正确访问角色数据。修改Startup.cs中的配置顺序:

// 先注册Identity服务
services.AddIdentity<User, ApplicationRole>()
    .AddEntityFrameworkStores<AccountContext>()
    .AddDefaultTokenProviders();

// 再配置认证和授权
var key = Encoding.ASCII.GetBytes(Configuration.GetValue<string>("JwtSettings:Secret"));
services
    .AddAuthorization()
    .AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(x =>
    {
        x.RequireHttpsMetadata = false;
        x.SaveToken = true;
        x.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuerSigningKey = true,
            IssuerSigningKey = new SymmetricSecurityKey(key),
            ValidateIssuer = false,
            ValidateAudience = false
        };
    });

2. 验证DbContext的继承关系

确保AccountContext正确继承IdentityDbContext,并指定对应的用户和角色类型,否则EF Core无法正确映射AspNetUserRoles关联表:

public class AccountContext : IdentityDbContext<User, ApplicationRole, string>
{
    public AccountContext(DbContextOptions<AccountContext> options) : base(options)
    {
    }

    // 其他DbSet定义...
}

3. 确认主键类型一致性

检查User、ApplicationRole的主键类型与数据库表是否一致:默认IdentityUser和IdentityRole使用string作为主键,需确保AspNetUsers.Id、AspNetRoles.Id、AspNetUserRoles.UserId和AspNetUserRoles.RoleId均为字符串类型,避免因类型不匹配导致关联查询失败。

4. 检查角色名称大小写

默认情况下,AddToRoleAsync和GetRolesAsync对角色名称大小写敏感,需保证添加角色时的名称与查询时完全一致,避免因大小写差异返回空结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 15:00:49