IOptions 与不匹配的属性名称绑定

Bri*_*ell 9 c# asp.net-core asp.net-core-2.1

是否可以将 JSON 文件 (appsettings.json) 中的属性绑定到使用不同属性名称的类?

{
    "WebTarget": {
    "WebURL": "http://www.stackoverflow.com"
  }
}
Run Code Online (Sandbox Code Playgroud)
public class MyServiceOptions
{
    public string Url { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想获取该WebURL设置并将其映射到Url选项类中的属性。我已经尝试过[DataMember][JsonProperty]但它们不起作用。

我知道这并不理想,属性名称应该与 JSON 中的内容匹配,但这是一种特殊情况。

小智 12

在 ASP.NET 6 中,可以使用ConfigurationKeyNameAttribute绑定与对象属性名称不同的属性。

public class MyServiceOptions
{
      [ConfigurationKeyName("WebURL")]    
      public string Url { get; set; }
}
Run Code Online (Sandbox Code Playgroud)


Nko*_*osi 7

对的,这是可能的。它需要更多的手动配置

services.Configure<MyServiceOptions>(myOptions => {
    myOptions.Url = Configuration.GetSection("WebTarget").GetValue<string>("WebURL", string.Empty);
});
Run Code Online (Sandbox Code Playgroud)

参考使用委托配置简单选项