【问题标题】:ASP.NET Core Options pattern with name split by single underscoreASP.NET Core 选项模式,名称由单个下划线分割
【发布时间】:2019-09-03 14:12:37
【问题描述】:

我正在尝试使用 ASP.NET Core 选项模式加载我的应用设置。

appsettings.json 包含:

{
  "TEst": "hello",
  "TEST_ABC": "2" 
}

POCO 类:

public class AppSetting
{
    public string Test { get; set; }

    public string TestAbc { get; set; }
}

绑定到配置:

services.Configure<AppSetting>(Configuration);

在控制器中访问 AppSetting 实例时,我只能将配置 Test 设置为 helloTestAbc 设置为 null

似乎Options模式无法转换这种命名配置,是否可以通过其他方式实现?

【问题讨论】:

  • 您尝试将属性更改为Test_Abc
  • TestAbc TEST_ABC 是两个不同的名字,他们必须匹配
  • @RyanWilson 好吧,我试图不这样做,因为它不适合 C# 中的属性命名。
  • @Train 是的,只是在寻找任何允许不匹配的解决方案:)
  • 您需要告诉框架如何处理下划线,例如您可以使用[JsonProperty("TEST_ABC")] 属性。

标签: asp.net-core asp.net-core-configuration


【解决方案1】:

自动完成的唯一方法是使用下划线 (Test_Abc) 命名您的属性。除此之外,您可以手动指定映射:

services.Configure<AppSettings>(o => 
{
    o.TestAbc = Configuration["TEST_ABC"];
    // etc.
});

@DavidG 关于使用[JsonProperty] 的评论可能有效。我从来没有在配置的上下文中尝试过。但是,它只有在使用 JSON 配置提供程序时才有效,如果它完全有效的话。例如,如果您以后需要通过环境变量来满足这一点,那么您就不走运了。因此,我会坚持使用比这更普遍适用的解决方案。

【讨论】:

    【解决方案2】:

    从 .NET 6.0 Preview 7 开始,您可以使用 ConfigurationKeyNameAttribute 类。

    [ConfigurationKeyName("TEST_ABC")]
    public string TestAbc { get; set; }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多