繁体   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