ASP.NET 6中UserManager服务无法获取求助:角色正常用户异常
问题排查与解决方案
核心错误原因
- 类型不匹配:你在Startup中注册的是针对
BOAPUser的Identity服务,但报错代码中尝试获取的是UserManager<IdentityUser>,DI容器中不存在该类型的服务实例。 - DbContext冗余配置:
ApplicationDbContext继承自IdentityDbContext<BOAPUser>,该基类已经包含用户相关的DbSet,无需额外定义DbSet<IdentityUser> BOAPUser,这会导致实体类型冲突。
具体修复步骤
1. 修正ApplicationDbContext代码
移除冗余的DbSet<IdentityUser>定义,修改后代码:
public class ApplicationDbContext : IdentityDbContext<BOAPUser> { public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) {} protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); } }
注:确保
BOAPUser类正确继承自IdentityUser,示例:public class BOAPUser : IdentityUser { // 自定义属性(如有需要) }
2. 保持Startup.cs配置(当前配置本身合规)
现有Startup配置无需修改,继续使用:
services.AddDefaultIdentity<BOAPUser>(options => options.SignIn.RequireConfirmedAccount = false) .AddRoles<IdentityRole>() .AddEntityFrameworkStores<ApplicationDbContext>();
3. 修正报错位置的代码
将获取UserManager的类型改为BOAPUser,与注册的服务类型匹配:
using (var scope = app.ApplicationServices.CreateScope()) { var userManager = scope.ServiceProvider.GetRequiredService<UserManager<BOAPUser>>(); // 后续业务逻辑 }
验证修复
完成上述修改后重启应用,调用用户相关功能即可解决"No service for type 'Microsoft.AspNetCore.Identity.UserManager'"的错误。
内容的提问来源于stack exchange,提问作者RJPWilliams
相关产品推荐
相关产品推荐

