我添加了一个自定义 JSON 文件,其中包含我想要在 .NET8 API 中读取的设置。标准
appsettings.json
文件可正确读取,但自定义 secrets.json
则无法正确读取。我试图从中阅读的部分始终是null
。我做错了什么?
Program.cs
:
var env = ConfigHelpers.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
var config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env}.json", optional: true, reloadOnChange: true)
.AddJsonFile("secrets.json", optional: false, reloadOnChange: true)
.AddEnvironmentVariables()
.AddCommandLine(args)
.Build();
var configurationModel = config.GetSection(ConfigurationModel.SectionName).Get<ConfigurationModel>();
builder.Services.AddSingleton(configurationModel);
var secretsConfigurationModel = config.GetSection(SecretsConfigModel.SectionName).Get<SecretsConfigModel>();
builder.Services.AddSingleton(secretsConfigurationModel);
从标准
appsettings.json
文件中读取的类:
public class ConfigurationModel
{
public const string SectionName = "AppConfig";
public int SaverDelay { get; set; } = 10000;
public int SaverBatchSize { get; set; } = 1000;
}
我的自定义阅读课程
secrets.json
:
public class SecretsConfigModel
{
public const string SectionName = "Encryption";
public string TokenSecretSalt { get; set; }
}
secrets.json
文件:
{
"Encryption": [
{ "TokenSecretSalt": "c48mt45ty487tg47y85mh8g5h6587h6g586gh568756" }
]
}
"Encryption"
文件中 secrets.json
属性的值是对象的 array:
{
"Encryption": [ // Array start
{ "TokenSecretSalt": "c48mt45ty487tg47y85mh8g5h6587h6g586gh568756" }
] // Array end
}
您可以使用集合来绑定它,例如
SecretsConfigModel []
:
SecretsConfigModel secretsModel =
config.GetSection(SecretsConfigModel.SectionName).Get<SecretsConfigModel []>()
.FirstOrDefault(); // Use SingleOrDefault() if there cannot be more than one.
演示小提琴#1 这里。
或者,您可以从 JSON 中消除数组嵌套,并且当前的代码将起作用:
{
"Encryption": {
"TokenSecretSalt": "c48mt45ty487tg47y85mh8g5h6587h6g586gh568756"
}
}
演示小提琴 #2 这里。