嵌套 class 属性 未从配置 ASP.NET 核心中正确填充

Nested class property not fill properly from configuration ASP.NET Core

我需要在 ASP.NET Core 2.2 中填写 appsetting.json 中的以下信息。

"SiteSetting": {
    "JwtSetting": {
      "SecretKey": "LongerThan-16Char-SecretKey",
      "Issuer": "MyWebsite",
      "Audience": "MyWebsite",
      "NotBeforeMinutes": "0",
      "ExpirationMinutes": "60"
    }
}

这是我的 SiteSetting class :

public class SiteSetting
{
    public JwtSetting JwtSettings { get; set; }
}

public class JwtSetting
{
    public string SecretKey { get; set; }
    public string Issuer { get; set; }
    public string Audience { get; set; }
    public int NotBeforeMinutes { get; set; }
    public int ExpirationMinutes { get; set; }
}

我在 Startup.cs 中使用此代码来填充 SiteSetting:

public IConfiguration Configuration { get; }

    private SiteSetting _siteSetting;

    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
        _siteSetting = configuration.GetSection(nameof(SiteSetting)).Get<SiteSetting>();
    }

    public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<SiteSetting>(Configuration.GetSection(nameof(SiteSetting)));
    }

但是当我调试它时,_siteSetting 为空。

有什么问题吗?我该如何解决这个问题?

您在 AppSettings.json 中定义了 JwtSetting,但在 SiteSetting class 中,您将其命名为 JwtSettings。 Class 属性 名称和 JSON 属性 键应该完全相同才能被自动解析。

像这样更改您的 AppSettings.json 即可正常工作:

"SiteSetting": {
    "JwtSettings": {
      "SecretKey": "LongerThan-16Char-SecretKey",
      "Issuer": "MyWebsite",
      "Audience": "MyWebsite",
      "NotBeforeMinutes": "0",
      "ExpirationMinutes": "60"
    }
}