[英]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 中的选项模式访问配置值:
Startup.ConfigureServices(...)
中注册了Messages
(示例如下)。services.Configure<Messages>(Configuration.GetSection("Messages"));
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.