我需要一些帮助,从appSettings检索使用disctionary没有硬编码的值。
"HMAC": {
"MLC": {
"Server": {
"PE": {
"ApiKey": null,
"SecretKey": null
},
"DNB": {
"ApiKey": null,
"SecretKey": null
}
},
"Clients": {
"Billing": {
"ApiKey": null,
"SecretKey": null
},
"Finance": {
"ApiKey": null,
"SecretKey": null
}
}
}
},
目前,这是我如何在我的appSettings中获得apiKeys。但它没有MLC层。我不知道如何添加其他层来获得服务器或客户端密钥。
public class HMAC
{
public IDictionary<string, HMACSettings> Server { get; set; } = null!;
public IDictionary<string, HMACSettings> Clients { get; set; } = null!;
public HMACSettings? GetServer(string KeyName)
{
return GetValue(this.Server, KeyName);
}
public HMACSettings? GetClients(string KeyName)
{
return GetValue(this.Clients, KeyName);
}
public HMACSettings? GetValue(IDictionary<string, HMACSettings> HmacCollection, string KeyName)
{
if (HmacCollection?.Count() > 0 && HmacCollection.ContainsKey(KeyName))
{
return HmacCollection[KeyName];
}
return null;
}
}
public class HMACSettings
{
public string ApiKey { get; set; } = string.Empty;
public string SecretKey { get; set; } = string.Empty;
}
我使用的是.Net Core,因此我示例化了HMac,当我需要密钥时,我只需调用
this.hmacSettings = hmac.Value?.GetServer(mlcKey);
如何在词典中添加另一层MLC。
2条答案
按热度按时间idfiyjo81#
你总是可以嵌套字典。我冒昧地添加了一个类,虽然看起来“服务器”和“客户端”在你的情况下是一种常量。
新类如下所示:
您现有的HMAC类已修改,现在看起来如下所示:
出于测试目的,我按如下方式填充设置:
使用
hmac.GetServer("MLC", "PE");
查询设置将返回// settings = HMACSettings { ApiKey = "pe-key", SecretKey = "secret-key" }
li9yvcax2#
有一种非常简单的方法可以获取值
hmac.Value?.GetServer(mlcKey);
并将其转换为自定义类型:您需要从IConfiguration注入配置才能使用它。