簡體   English   中英

如何使用if else從appsettings.json默認提供程序?

[英]How to default provider from appsettings.json using if else?

我有2個提供者,如下所示。 如果“ IsDefaultProvider”部分為“ true”,我想在注入IConfiguration時獲取其值。

我寫下面的代碼我不能工作

var providers = configuration.GetSection("X:Providers");
            foreach(var provider in providers.)
            {
                if (providers.GetSection("IsDefaultProvider").Value == "true")
                {
                    _defaultProvider = (XProviderType)Enum.Parse(typeof(XProviderType),  provider.Value.ToString());
                }
            }

Appsettings.json

"X": {
    "Providers": [
      {
        "IsDefaultProvider": false,
        "Name": "***",
        "BaseUrl": "https://*",
        "ApiKey": "*****",
        "SecretKey": "****"
      },
      {
        "IsDefaultProvider": true,
        "Name": "*****",
        "BaseUrl": "http://*"
      }
    ]
  }

appsettings.json Configuration從appsettings.json映射到Provider ,請嘗試按照以下步驟操作:

  • 定義Provider模型

     public class Provider { public bool IsDefaultProvider { get; set; } public string Name { get; set; } public string BaseUrl { get; set; } public string ApiKey { get; set; } public string SecretKey { get; set; } } public class X { public List<Provider> Providers { get; set; } } 
  • 獲取默認提供者

     var providers = Configuration.GetSection("X").Get<X>(); foreach (var provider in providers.Providers) { if (provider.IsDefaultProvider == true) { //var _defaultProvider = (XProviderType)Enum.Parse(typeof(XProviderType), provider.Value.ToString()); } } 

您在問題中顯示的代碼中存在兩個問題:

  1. providers. 不編譯。 我希望這可能是一個糟糕的復制粘貼,但我指出是為了以防萬一,因為它應該是providers.GetChildren()
  2. 解析JSON布爾值時,字符串表示形式為True而不是true ,因此您需要對此進行比較(或者不區分大小寫)。

這是一個工作示例:

var providers = configuration.GetSection("X:Providers");
foreach (var provider in providers.GetChildren())
{
    if (provider.GetSection("IsDefaultProvider").Value.ToLower() == "true")
    {
         _defaultProvider = ...
    }
}

我也將換用GetSection("IsDefaultProvider") ,只是因為IsDefaultProvider不是一個節:它是一個屬性。 這是一個如何稍微簡化代碼的示例:

if (provider["IsDefaultProvider"].ToLower() == "true")

綜上所述,如果您不反對創建其他類, Tao Zhou的答案是一種更加類型安全的方式來處理此過程,因此,我鼓勵您考慮使用他的方法。

暫無
暫無

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

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