簡體   English   中英

如何在.Net Core 2.2中正確使用ConfigurationManager.GetSection()

[英]How to use properly ConfigurationManager.GetSection() in .Net Core 2.2

我在.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應用程序配置的功能?

鑒於您已經創建了如下屬性:

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

並且,要引用服務中的設置,只需將IOptions添加為ctor參數即可:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM