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

ASP.NET Identity注册按钮报错:无法解析UserManager服务

问题排查:Identity自定义User实体导致UserManager无法解析

核心原因

你在注册Identity服务时,依然使用默认的IdentityUser作为泛型参数,但你的RegisterModel依赖的是UserManager<Orchard.Entities.User>,DI容器中并未注册该类型的服务,导致激活RegisterModel时无法解析依赖。

解决步骤

  1. 修改Identity服务注册代码
    将AddDefaultIdentity的泛型参数替换为你的自定义User实体:

    builder.Services.AddDefaultIdentity<Orchard.Entities.User>(options => options.SignIn.RequireConfirmedAccount = true)
        .AddEntityFrameworkStores<OrchardDBContext>();
    
  2. 更新DbContext继承关系
    确保你的OrchardDBContext继承自IdentityDbContext<Orchard.Entities.User>,而非默认的IdentityDbContext或IdentityDbContext<IdentityUser>:

    using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
    using Microsoft.EntityFrameworkCore;
    using Orchard.Entities;
    
    namespace YourNamespace
    {
        public class OrchardDBContext : IdentityDbContext<User>
        {
            public OrchardDBContext(DbContextOptions<OrchardDBContext> options)
                : base(options)
            {
            }
    
            // 添加自定义实体的DbSet
            public DbSet<Address> Addresses { get; set; }
            public DbSet<Messages> Messages { get; set; }
        }
    }
    
  3. 确认RegisterModel的注入类型
    检查RegisterModel的构造函数,确保注入的是UserManager<Orchard.Entities.User>:

    using Orchard.Entities;
    using Microsoft.AspNetCore.Identity;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.AspNetCore.Mvc.RazorPages;
    
    namespace Orchard.Areas.Identity.Pages.Account
    {
        public class RegisterModel : PageModel
        {
            private readonly SignInManager<User> _signInManager;
            private readonly UserManager<User> _userManager;
            private readonly IUserStore<User> _userStore;
    
            public RegisterModel(
                UserManager<User> userManager,
                IUserStore<User> userStore,
                SignInManager<User> signInManager)
            {
                _userManager = userManager;
                _userStore = userStore;
                _signInManager = signInManager;
            }
    
            // 其他页面逻辑...
        }
    }
    
  4. 重新生成数据库迁移(若有旧迁移)
    如果之前使用默认IdentityUser生成过迁移文件,需删除旧迁移,重新执行以下命令生成新迁移并更新数据库:

    dotnet ef migrations add InitialCustomUser
    dotnet ef database update
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 22:03:24