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

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.EntityFrameworkCore
  • IdentityServer4.AspNetCore.ApiAuthorization
  • Microsoft.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 05:47:33