gpt4 book ai didi

asp.net-core - 从 secret /环境变量中替换 ASP.NET 核心 appsettings.json 中类型化数组的一部分?

转载 作者:行者123 更新时间:2023-12-03 21:24:10 25 4
gpt4 key购买 nike

我们有一个带有这个 appsettings.json 的 ASP.NET Core Web 应用:

{
"Subscriptions": [
{
"Name": "Production",
"PublishSettings": "<PublishData>SECRET</PublishData>",
"Environments": [
{
"Name": "Prod",
"DeploymentServiceNames": [
"api1",
"api2",
"api3"
]
}
]
},
{
"Name": "Test",
"PublishSettings": "<PublishData>SECRET</PublishData>",
"Environments": [
{
"Name": "Test1",
"DeploymentServiceNames": [
"api1",
"api2"
]
},
{
"Name": "Test2",
"DeploymentServiceNames": [
"api1",
"api2"
]
}
]
}
]
}
PublishSettings值是 secret 的,所以我希望这些在我的本地用户 secret 文件中,以及在我的部署的环境变量中。但是,因为 Subscriptions是一个数组,我不确定如何。我不是特别想交换整个 Subscriptions部分。有没有办法为这样的数组中的每个项目交换一个属性,也许是通过在强类型订阅模型上定义一个键属性?

最佳答案

当您在 .NET Core 中加载配置时,在后台它表示为一组由添加的配置提供程序提供的键值对(键和值都有 string 类型)。

例如,appsettings.json将由 JsonConfigurationProvider 表示如下设置列表:

{Subscriptions:0:Environments:0:DeploymentServiceNames:0, api1}
{Subscriptions:0:Environments:0:DeploymentServiceNames:1, api2}
{Subscriptions:0:Environments:0:DeploymentServiceNames:2, api3}
{Subscriptions:0:Environments:0:Name, Prod}
{Subscriptions:0:Name, Production}
{Subscriptions:0:PublishSettings, <PublishData>SECRET</PublishData>}
{Subscriptions:1:Environments:0:DeploymentServiceNames:0, api1}
{Subscriptions:1:Environments:0:DeploymentServiceNames:1, api2}
{Subscriptions:1:Environments:0:Name, Test1}
{Subscriptions:1:Environments:1:DeploymentServiceNames:0, api1}
{Subscriptions:1:Environments:1:DeploymentServiceNames:1, api2}
{Subscriptions:1:Environments:1:Name, Test2}
{Subscriptions:1:Name, Test}
{Subscriptions:1:PublishSettings, <PublishData>SECRET</PublishData>}

如您所见,JSON 结构被展平,键是通过用冒号连接内部部分名称来构建的。数组元素添加了适当的索引作为名称。

如果您添加另一个配置源,例如环境变量或其他 secret json 文件,其设置具有相同的 key ,它将覆盖设置。

所以如果你想添加或覆盖 PublishSettings ,您可以添加另一个 JSON 文件作为配置源:
{
"Subscriptions": [
{
"PublishSettings": "<PublishData>SECRET</PublishData>"
},
{
"PublishSettings": "<PublishData>SECRET</PublishData>"
}
]
}

或者使用以下键将其添加为环境变量:
Subscriptions:0:PublishSettings
Subscriptions:1:PublishSettings

这种设置覆盖(或添加)对于 .NET Core 配置绑定(bind)器是透明的。设置 POCO 将包含 PublishSettings 的值来自提供此类值的最后一个配置源。

关于asp.net-core - 从 secret /环境变量中替换 ASP.NET 核心 appsettings.json 中类型化数组的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49656176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com