ASP.NET 名称由单个下划线分隔的核心选项模式
ASP.NET Core Options pattern with name split by single underscore
我正在尝试使用 ASP.NET 核心选项模式加载我的应用程序设置。
appsettings.json
包含:
{
"TEst": "hello",
"TEST_ABC": "2"
}
POCO class:
public class AppSetting
{
public string Test { get; set; }
public string TestAbc { get; set; }
}
绑定到配置:
services.Configure<AppSetting>(Configuration);
在控制器中访问 AppSetting 实例时,我只能获得配置 Test
作为 hello
。 TestAbc
设置为 null
。
Options pattern 似乎无法转换这种命名配置,是否可以通过其他方式实现?
让它自动完成的唯一方法是用下划线 (Test_Abc
) 命名您的 属性。除此之外,您可以手动指定映射:
services.Configure<AppSettings>(o =>
{
o.TestAbc = Configuration["TEST_ABC"];
// etc.
});
@DavidG 关于使用 [JsonProperty]
的评论可能 有效。我从来没有在配置的上下文中尝试过。但是,它只有在使用 JSON 配置提供程序时才有效(如果它真的有效的话)。例如,如果您稍后需要通过环境变量来满足此要求,那么您就不走运了。因此,我会坚持使用比这更普遍适用的解决方案。
从 .NET 6.0 Preview 7 开始,您可以使用 ConfigurationKeyNameAttribute
class.
[ConfigurationKeyName("TEST_ABC")]
public string TestAbc { get; set; }
我正在尝试使用 ASP.NET 核心选项模式加载我的应用程序设置。
appsettings.json
包含:
{
"TEst": "hello",
"TEST_ABC": "2"
}
POCO class:
public class AppSetting
{
public string Test { get; set; }
public string TestAbc { get; set; }
}
绑定到配置:
services.Configure<AppSetting>(Configuration);
在控制器中访问 AppSetting 实例时,我只能获得配置 Test
作为 hello
。 TestAbc
设置为 null
。
Options pattern 似乎无法转换这种命名配置,是否可以通过其他方式实现?
让它自动完成的唯一方法是用下划线 (Test_Abc
) 命名您的 属性。除此之外,您可以手动指定映射:
services.Configure<AppSettings>(o =>
{
o.TestAbc = Configuration["TEST_ABC"];
// etc.
});
@DavidG 关于使用 [JsonProperty]
的评论可能 有效。我从来没有在配置的上下文中尝试过。但是,它只有在使用 JSON 配置提供程序时才有效(如果它真的有效的话)。例如,如果您稍后需要通过环境变量来满足此要求,那么您就不走运了。因此,我会坚持使用比这更普遍适用的解决方案。
从 .NET 6.0 Preview 7 开始,您可以使用 ConfigurationKeyNameAttribute
class.
[ConfigurationKeyName("TEST_ABC")]
public string TestAbc { get; set; }