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

ASP.NET Core 6 MVC切换AddDefaultIdentity至AddIdentity后遇异常

解决方案

1. 修正Identity服务注册

在Program.cs的服务配置段,将原AddDefaultIdentity<IdentityUser>替换为以下代码,补充身份UI所需的核心服务(这是AddDefaultIdentity默认包含但AddIdentity缺失的关键部分):

builder.Services.AddIdentity<IdentityUser, IdentityRole>()
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddDefaultTokenProviders()
    .AddDefaultUI(); // 关键:添加默认身份页面的UI支持

2. 调整中间件路由顺序

在Program.cs的中间件配置段,先保留MVC默认路由,再添加Razor Pages路由映射,确保MVC路由优先处理,同时身份页面能被正确识别:

// 保留MVC核心路由(适配你的架构需求)
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

// 仅映射身份系统相关的Razor Pages页面
app.MapRazorPages();

3. 角色种子数据初始化示例

如果需要初始化角色数据,可在app.Run();之前添加以下逻辑(依赖已注册的RoleManager):

using (var scope = app.Services.CreateScope())
{
    var roleManager = scope.ServiceProvider.GetRequiredService<RoleManager<IdentityRole>>();
    var targetRoles = new[] { "Admin", "Editor", "User" };

    foreach (var roleName in targetRoles)
    {
        if (!await roleManager.RoleExistsAsync(roleName))
        {
            await roleManager.CreateAsync(new IdentityRole(roleName));
        }
    }
}

问题根源说明

  • 替换AddDefaultIdentity为AddIdentity后,缺失了AddDefaultUI(),导致身份页面的Razor Pages服务未注册,因此调用MapRazorPages()会抛出服务缺失异常。
  • 直接添加AddRazorPages()会全局启用Razor Pages路由,其优先级会覆盖MVC的/Account/Login等路由,导致MVC路由失效。
  • AddDefaultUI()仅注册身份系统所需的Razor Pages组件,不会干扰MVC的正常路由逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 18:10:36