如何替换自定义 appsettings.json 文件中的列表项?
How to replace list items in a custom appsettings.json file?
我有针对每个环境的自定义 appsettings.json 文件,因此 appsettings.Dev.json、appsettings.Test.json、appsettings.Prod.json。在主 appsettings.json 中,我有以下代码:
"EmailSettings": {
"Recipients": [
"person@test.com"
]
}
然后在自定义 json 文件中,我想覆盖此列表,如下所示:
"EmailSettings": {
"Recipients": [
"anotherperson@test.com"
]
}
但是,这会像这样附加:
"EmailSettings": {
"Recipients": [
"person@test.com",
"anotherperson@test.com"
]
}
对于所有其他类型的设置,它们会被替换,但出于某种原因,自定义设置文件中的列表似乎会被附加。使用 .net,您过去常常对 xslt 有更多的粒度,以便能够确定您是要替换还是附加覆盖的设置。这里有什么建议吗?
解决方案(对我来说)
我这样做了,它在自定义 json 设置中被替换了。主要 appsettings.json:
"EmailSettings": {
"Recipients:0": "person@test.com"
}
然后在自定义设置文件中:
"EmailSettings": {
"Recipients:0": "anotherperson@test.com"
}
感谢您的回复!
在appsettings.Test.json
中使用下面的
"EmailSettings:Recipients:0" : "anotherperson@test.com"
配置 API 能够通过在配置键中使用定界符展平分层数据来维护分层配置数据。
您需要像
一样定义电子邮件设置class
public class EmailSettings
{
public List<string> Recipients { get; set; }
}
并连接 DI 以在 Configure
方法中添加选项 Startup
class
public void ConfigureServices(IServiceCollection services)
{
// add Options
services.AddOptions();
services.Configure<EmailSettings>(Configuration.GetSection("EmailSettings"));
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
我为环境使用了不同的 appsettings
文件(包括 Development
)
因此,首先确保您已在配置中添加环境 json 文件:
config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{EnvironmentName}.json", optional: true, reloadOnChange: true)
那么在我原来的 appsettings.json
中它会是这样的:
"EmailSettings": {
"Recipients": []
}
然后进行本地开发(Development
环境):appsettings.Development.json
"EmailSettings": {
"Recipients": [
"person@test.com"
]
}
然后对于其他环境(我们称之为 Staging
):appsettings.Staging.json
"EmailSettings": {
"Recipients": [
"anotherperson@test.com"
]
}
然后,只需确保在您的其他环境中已在环境变量中设置 ASPNETCORE_ENVIRONMENT
。
我有针对每个环境的自定义 appsettings.json 文件,因此 appsettings.Dev.json、appsettings.Test.json、appsettings.Prod.json。在主 appsettings.json 中,我有以下代码:
"EmailSettings": {
"Recipients": [
"person@test.com"
]
}
然后在自定义 json 文件中,我想覆盖此列表,如下所示:
"EmailSettings": {
"Recipients": [
"anotherperson@test.com"
]
}
但是,这会像这样附加:
"EmailSettings": {
"Recipients": [
"person@test.com",
"anotherperson@test.com"
]
}
对于所有其他类型的设置,它们会被替换,但出于某种原因,自定义设置文件中的列表似乎会被附加。使用 .net,您过去常常对 xslt 有更多的粒度,以便能够确定您是要替换还是附加覆盖的设置。这里有什么建议吗?
解决方案(对我来说)
我这样做了,它在自定义 json 设置中被替换了。主要 appsettings.json:
"EmailSettings": {
"Recipients:0": "person@test.com"
}
然后在自定义设置文件中:
"EmailSettings": {
"Recipients:0": "anotherperson@test.com"
}
感谢您的回复!
在appsettings.Test.json
中使用下面的
"EmailSettings:Recipients:0" : "anotherperson@test.com"
配置 API 能够通过在配置键中使用定界符展平分层数据来维护分层配置数据。
您需要像
一样定义电子邮件设置class public class EmailSettings
{
public List<string> Recipients { get; set; }
}
并连接 DI 以在 Configure
方法中添加选项 Startup
class
public void ConfigureServices(IServiceCollection services)
{
// add Options
services.AddOptions();
services.Configure<EmailSettings>(Configuration.GetSection("EmailSettings"));
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
我为环境使用了不同的 appsettings
文件(包括 Development
)
因此,首先确保您已在配置中添加环境 json 文件:
config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{EnvironmentName}.json", optional: true, reloadOnChange: true)
那么在我原来的 appsettings.json
中它会是这样的:
"EmailSettings": {
"Recipients": []
}
然后进行本地开发(Development
环境):appsettings.Development.json
"EmailSettings": {
"Recipients": [
"person@test.com"
]
}
然后对于其他环境(我们称之为 Staging
):appsettings.Staging.json
"EmailSettings": {
"Recipients": [
"anotherperson@test.com"
]
}
然后,只需确保在您的其他环境中已在环境变量中设置 ASPNETCORE_ENVIRONMENT
。