嵌套类属性未从配置 ASP.NET Core 正确填充

mr-*_*taj 5 asp.net asp.net-core asp.net-core-2.0

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

"SiteSetting": {
    "JwtSetting": {
      "SecretKey": "LongerThan-16Char-SecretKey",
      "Issuer": "MyWebsite",
      "Audience": "MyWebsite",
      "NotBeforeMinutes": "0",
      "ExpirationMinutes": "60"
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的SiteSetting课:

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; }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用这段代码来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)));
    }
Run Code Online (Sandbox Code Playgroud)

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

有什么问题?我怎么解决这个问题?

Moi*_*jik 6

AppSettings.json您定义的JwtSetting但在SiteSetting类中,您将其命名为 JwtSetting s。类属性名称和 JSON 属性键应该完全相同,以便自动解析。

像这样更改您的 AppSettings.json 并且它将正常工作:

"SiteSetting": {
    "JwtSettings": {
      "SecretKey": "LongerThan-16Char-SecretKey",
      "Issuer": "MyWebsite",
      "Audience": "MyWebsite",
      "NotBeforeMinutes": "0",
      "ExpirationMinutes": "60"
    }
}
Run Code Online (Sandbox Code Playgroud)