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环境下可正常运行,当前环境下报错(报错信息见附图)
排查与解决步骤
核对框架版本兼容性
确认当前项目的.NET版本与Dapper Identity存储包的兼容情况,部分Dapper Identity扩展包对.NET 7+有额外配置要求,比如需显式指定数据库类型或连接字符串注入方式。验证自定义用户模型结构
- 确保
MyIdentityUser正确继承基类(如IdentityUser或泛型版本IdentityUser<TKey>),且Id、UserName、Email等必填字段定义无误 - 若使用自定义主键类型(非Guid),需在
AddDapperStores中显式指定,示例:.AddDapperStores<int>()
- 确保
确认数据库连接配置
检查是否已正确注入数据库连接,Dapper存储依赖有效数据库连接,可通过以下方式注册:builder.Services.AddScoped<IDbConnection>(sp => new SqlConnection(builder.Configuration.GetConnectionString("DefaultConnection")));检查NuGet包版本匹配度
确保Dapper Identity相关包的版本与当前.NET框架版本一致,避免因版本不兼容导致API调用错误。根据报错信息针对性处理
- 若为类型转换异常:核对模型属性与数据库列的类型匹配度
- 若为找不到存储实现类:确认已安装对应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
相关产品推荐
相关产品推荐

