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

Blazor .NET 8.0自定义身份验证失效问题排查

使用Dapper自定义Identity模型与存储时的报错排查方案

问题场景

  • 自定义MyIdentityUser作为Identity用户模型,使用AddDapperStores()配置Dapper存储提供器
  • 配置代码如下:
builder.Services.AddIdentityCore<MyIdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
    .AddDapperStores()
    .AddSignInManager()
    .AddDefaultTokenProviders();
  • 该配置在Blazor .NET 6.0环境下可正常运行,当前环境下报错(报错信息见附图)

排查与解决步骤

  1. 核对框架版本兼容性
    确认当前项目的.NET版本与Dapper Identity存储包的兼容情况,部分Dapper Identity扩展包对.NET 7+有额外配置要求,比如需显式指定数据库类型或连接字符串注入方式。

  2. 验证自定义用户模型结构

    • 确保MyIdentityUser正确继承基类(如IdentityUser或泛型版本IdentityUser<TKey>),且Id、UserName、Email等必填字段定义无误
    • 若使用自定义主键类型(非Guid),需在AddDapperStores中显式指定,示例:
      .AddDapperStores<int>()
      
  3. 确认数据库连接配置
    检查是否已正确注入数据库连接,Dapper存储依赖有效数据库连接,可通过以下方式注册:

    builder.Services.AddScoped<IDbConnection>(sp => 
        new SqlConnection(builder.Configuration.GetConnectionString("DefaultConnection")));
    
  4. 检查NuGet包版本匹配度
    确保Dapper Identity相关包的版本与当前.NET框架版本一致,避免因版本不兼容导致API调用错误。

  5. 根据报错信息针对性处理

    • 若为类型转换异常:核对模型属性与数据库列的类型匹配度
    • 若为找不到存储实现类:确认已安装对应Dapper Identity存储包并引用正确命名空间
    • 若为数据库访问错误:验证连接字符串权限、数据库中是否存在AspNetUsers等标准Identity表结构

.NET 7+环境适配示例

如果当前项目基于.NET 7或更高版本,可尝试显式指定数据库类型的配置方式:

builder.Services.AddIdentityCore<MyIdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
    .AddDapperStores(options => 
    {
        options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"));
    })
    .AddSignInManager()
    .AddDefaultTokenProviders();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 14:03:19