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 作为 helloTestAbc 设置为 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; }