【问题标题】:How to use properly ConfigurationManager.GetSection() in .Net Core 2.2如何在 .Net Core 2.2 中正确使用 ConfigurationManager.GetSection()
【发布时间】:2019-08-08 14:54:08
【问题描述】:

我在 .net 核心的 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 应用配置?

【问题讨论】:

  • 部分分隔符是:,而不是/

标签: c# .net json visual-studio .net-core


【解决方案1】:

假设您已经创建了这样的属性:

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

    public IConfiguration Configuration { get; }
}

然后您可以访问这些元素,如下所示:

var issuer = Configuration["JwtBearerSettings:Issuer"],

【讨论】:

    【解决方案2】:

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

    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);
    

    并且,要在服务中引用您的设置,只需添加 IOptions 作为 ctor 参数:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-11
      • 2019-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多