C# 如何在.Net Core 2.2中正确使用ConfigurationManager.GetSection()

C# 如何在.Net Core 2.2中正确使用ConfigurationManager.GetSection(),c#,.net,json,visual-studio,.net-core,C#,.net,Json,Visual Studio,.net Core,在.NETCore的web应用程序中使用此方法获取配置值时,我遇到了一些问题 var settings = ConfigurationManager.GetSection("JwtBearerSettings/Issuer"); 此方法由我引用的一个项目调用。它也在.NET Core 2.2中,配置设置在该文件中 appsettings.json 问题是,当我调试时,我总是得到settings==null,我一直在寻找类似的问题,但我无法解决这个问题 我的json是 { "Jwt

在.NETCore的web应用程序中使用此方法获取配置值时,我遇到了一些问题

 var settings =  ConfigurationManager.GetSection("JwtBearerSettings/Issuer");
此方法由我引用的一个项目调用。它也在.NET Core 2.2中,配置设置在该文件中

appsettings.json

问题是,当我调试时,我总是得到settings==null,我一直在寻找类似的问题,但我无法解决这个问题

我的json是

{
     "JwtBearerSettings": {
        "Issuer": "Auth.MyStuff.Api",
        "PrivateKey": "Blablabla",
        "ExpirationTime": "15"
        }
}
你知道这种方法是否可行吗


如果您创建了这样一个属性,那么我是否错过了使用我的库获取web应用程序配置的步骤?

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }
}
var issuer = Configuration["JwtBearerSettings:Issuer"],
然后可以访问元素,如下所示:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }
}
var issuer = Configuration["JwtBearerSettings:Issuer"],

假设您已经创建了如下属性:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }
}
var issuer = Configuration["JwtBearerSettings:Issuer"],
然后可以访问元素,如下所示:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }
}
var issuer = Configuration["JwtBearerSettings:Issuer"],

读取配置的最简单方法是一次只读取一个值。结构化数据由冒号分隔,因此您的示例变成:

var issuer = Configuration["JwtBearerSettings:Issuer"];
如果你正在阅读大量的设置,这显然是一种痛苦。因此,您可以简单地将模型对象绑定到节。例如,如果您有一个包含属性的模型对象,那么

class JwtBearerSettings {
    public string Issuer {get;set;}
}
然后可以使用GetSection绑定到设置对象:

var jbs = new JwtBearerSettings();
Configuration.GetSection("JwtBearerSettings").Bind(jbs);
很多库都使用这种模式,因为它允许您提供所需的配置,只要模型预先填充了合理的默认值

支持的第三种模式.Net Core可与DI一起使用:

您可以在此处向服务工厂注册配置模型:

var jbs = Configuration.GetSection("JwtBearerSettings");
services.Configure<JwtBearerSettings>(jbs);
而且,要在服务中引用您的设置,只需将IOOptions添加为ctor参数:

public MyService(IOptions<JwtBearerSettings> jwtOptions)
{
    Config = jwtOptions.Value;
}

读取配置的最简单方法是一次只读取一个值。结构化数据由冒号分隔,因此您的示例变成:

var issuer = Configuration["JwtBearerSettings:Issuer"];
如果你正在阅读大量的设置,这显然是一种痛苦。因此,您可以简单地将模型对象绑定到节。例如,如果您有一个包含属性的模型对象,那么

class JwtBearerSettings {
    public string Issuer {get;set;}
}
然后可以使用GetSection绑定到设置对象:

var jbs = new JwtBearerSettings();
Configuration.GetSection("JwtBearerSettings").Bind(jbs);
很多库都使用这种模式,因为它允许您提供所需的配置,只要模型预先填充了合理的默认值

支持的第三种模式.Net Core可与DI一起使用:

您可以在此处向服务工厂注册配置模型:

var jbs = Configuration.GetSection("JwtBearerSettings");
services.Configure<JwtBearerSettings>(jbs);
而且,要在服务中引用您的设置,只需将IOOptions添加为ctor参数:

public MyService(IOptions<JwtBearerSettings> jwtOptions)
{
    Config = jwtOptions.Value;
}
节分隔符为:,而不是/节分隔符为:,而不是/