ASP.NET MVC项目AddSigningCredentials相关空引用异常求助
解决ASP.NET MVC中IdentityServer的NullReferenceException问题
从你提供的堆栈跟踪能看出来,异常出现在ConfigureApiResources.GetApiResources()方法里——这说明IdentityServer在加载API资源配置时找不到有效的配置项,才触发了空引用。结合你的代码和配置,我整理了几个可行的解决方向:
1. 显式添加API资源配置
AddApiAuthorization默认会尝试从配置或代码里读取API资源,但如果没有任何定义,就会触发这个问题。你可以通过两种方式补全配置:
方式一:通过代码配置
修改你的IdentityServer注册代码,在AddApiAuthorization的回调里直接定义API资源:
services.AddIdentityServer() .AddApiAuthorization<ApplicationUser, AppIdentityDbContext>(options => { // 替换成你实际的API名称和显示名 options.ApiResources.Add(new ApiResource("PortalApi", "Portal API") { Scopes = { "PortalApi" } }); // 同时添加对应的API访问范围 options.ApiScopes.Add(new ApiScope("PortalApi", "Portal API 访问权限")); });
方式二:通过appsettings.json配置
在IdentityServer节点下添加ApiResources和ApiScopes配置:
{ "IdentityServer": { "Key": { "Type": "Development" }, "ApiResources": [ { "Name": "PortalApi", "DisplayName": "Portal API", "Scopes": ["PortalApi"] } ], "ApiScopes": [ { "Name": "PortalApi", "DisplayName": "Portal API 访问权限" } ] } }
2. 检查Identity相关包版本兼容性
这个异常也可能是IdentityServer相关NuGet包版本不匹配导致的。请确保以下包的版本保持一致:
Microsoft.AspNetCore.Identity.EntityFrameworkCoreIdentityServer4.AspNetCore.ApiAuthorizationMicrosoft.AspNetCore.ApiAuthorization.IdentityServer
可以通过NuGet包管理器更新到最新兼容版本,或者锁定相同的主版本号。
3. 确保IdentityServer数据库已迁移
你用了AddApiAuthorization<ApplicationUser, AppIdentityDbContext>,IdentityServer的相关表会和Identity用户表共享同一个DbContext。请确保你已经执行了数据库迁移并更新了数据库:
# 在Package Manager Console中执行 Add-Migration InitialIdentityServerMigration Update-Database
4. 验证中间件顺序
在Startup.cs的Configure方法中,务必保证中间件顺序正确:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // ... 其他中间件(比如异常处理、静态文件) app.UseRouting(); // 先启用认证,再启用授权 app.UseAuthentication(); app.UseAuthorization(); // 手动添加IdentityServer中间件(AddApiAuthorization通常会自动处理,但手动加更保险) app.UseIdentityServer(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); endpoints.MapRazorPages(); }); }
核心思路就是让IdentityServer有可加载的有效API资源配置,按照上面的步骤调整后,应该就能解决这个空引用异常了。
内容的提问来源于stack exchange,提问作者Jonas Arcangel
相关产品推荐
相关产品推荐

