簡體   English   中英

鍵值對值問題 appsettings

[英]Keyvaluepair value issue appsettings

這是我的應用設置

  {
    "Messages": {
        "ApiUrl": "demo",   
        "ApiKey": {
          "Key": "key",
          "Value": "1234"
        }
    }
  }

Model Class:

public class CPSSettings
{
    public Messages Messages { get; set; } = null!;  
}
public class Messages
{
    public string ApiUrl { get; set; } = null!;
    public KeyValuePair<string?, string?> ApiKey{ get; set; }
} 
       

我沒有得到_settings.Messages.ApiKey.Key_settings.Messages.ApiKey.Value的值

但接收ApiUrl的價值。 我對 KeyValuePair 沒有收到值有疑問

public testClient(IOptions<CPSSettings> options)
{  
    _settings = options.Value;
}

//...

if (_settings.Messages.ApiKey.Key is not null 
    && _settings.Messages.ApiKey.Value is not null)
{
    var s = _settings.Messages.ApiKey.Key;    // am getting null vaues in both
    var s1 = _settings.Messages.ApiKey.Value
}

KeyValuePair的成員是只讀的。 初始化結構后,框架無法設置這些值

我建議您使用您控制的另一種 object 類型。 具有可修改成員的一種。

例如

public class CPSSettings {
    public Messages Messages { get; set; } = null!;  
}

public class Messages {
    public string ApiUrl { get; set; } = null!;
    public ApiKey ApiKey{ get; set; } //<-- NOTE THE CHANGE
} 

public class ApiKey {
    public string? Key { get; set; }
    public string? Value { get; set; }
}

這樣,在綁定設置時,框架可以初始化並正確設置成員的值

刪除CPSSettings將簡化場景。 請參閱下文,了解如何使用Messages通過.NET 中的選項模式訪問配置值:

  1. 確保您已在Startup.ConfigureServices(...)中注冊了Messages (示例如下)。
services.Configure<Messages>(Configuration.GetSection("Messages"));
  1. 接收IOptions<Messages>作為testClient構造函數參數(下面的示例)。
public testClient(IOptions<Messages> options)
{
    _settings = options.Value;
}

嘗試這個

var cpsSettingsSection = configuration.GetSection("Messages");
var cpsSettings = cpsSettingsSection.Get<Messages>();

var url = cpsSettings.ApiUrl;
var key = cpsSettings.ApiKey.Key.Dump();    
var value = cpsSettings.ApiKey.Value.Dump();

//services.Configure<Messages>(cpsSettingsSection);

}

public class Messages
{
    public string ApiUrl { get; set; }
    public KeyValueString ApiKey {get; set;}
 }

public class KeyValueString
{
    public string Key { get; set; }
    public string Value { get; set; }
}

暫無
暫無

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

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