Blazor WASM托管认证项目升级到.NET 6后点击登录报500错误如何解决
错误原因
- 核心原因1:DataContext构造函数参数类型不匹配,EF Core在.NET 6中要求泛型
DbContextOptions<TContext>作为构造函数的上下文配置参数,你当前使用非泛型DbContextOptions会导致依赖注入解析失败,触发服务端错误。 - 核心原因2:Duende IdentityServer v5默认不再自动生成开发环境临时签名凭证,你未显式配置签名密钥时,登录流程中签发令牌会抛出异常。
- 次要原因:首次生成的迁移未完整覆盖Duende IdentityServer的表结构变更要求,导致数据读写异常。
修复步骤
- 修正DataContext构造函数参数
将你的DataContext代码替换为以下内容:
public class DataContext : ApiAuthorizationDbContext<ApplicationUser> { public DataContext(DbContextOptions<DataContext> options, IOptions<OperationalStoreOptions> operationalStoreOptions) : base(options, operationalStoreOptions) { ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking; } }
- 给IdentityServer配置签名凭证
修改Startup.cs中AddIdentityServer的配置链,开发环境添加开发者临时签名凭证,生产环境替换为你自己的正式证书即可:
services.AddIdentityServer() .AddDeveloperSigningCredential() // 新增该行 .AddApiAuthorization<ApplicationUser, DataContext>( options => { options.IdentityResources["openid"].UserClaims.Add(JwtClaimTypes.Role); options.ApiResources.Single().UserClaims.Add(JwtClaimTypes.Role); });
- 重新执行数据库迁移
删除之前生成的UpdateToDuende迁移文件,在包管理器控制台依次执行以下命令:
Remove-Migration Add-Migration UpdateToDuendeFixed Update-Database
完成以上操作后重新运行项目即可解决登录500问题。如果仍有异常,可以开启IdentityServer的Debug级日志,查看具体错误信息调整配置。
内容的提问来源于stack exchange,提问作者JoeyD
相关产品推荐
相关产品推荐

