与 ASP.NET 核心选项服务绑定时忽略模型 属性

Ignore model property when binding with ASP.NET Core Options service

我正在使用选项服务来绑定分层 configuration 数据。

但是假设我有这样一个 class:

public class PersonOptions
{

  public string Name { get; set; }

  public int Age { get; set; }

  public bool Foo {               // <--- I want binder to ignore this
    get {
      // ... do stuff
    }
  }

  public bool IgnoreMe =>         // <--- I want binder to ignore this
    throw new Exception();

}

因为 Foo 属性 是 public,活页夹运行它并触发一些抛出异常的代码。

我的设计要求它是public,我不想把它改成方法。

是否有一些属性或覆盖我可以用来告诉活页夹忽略 属性?

您可以使用 JsonIgnore 忽略正文中的 属性:

public class PersonOptions
{

  public string Name { get; set; }

  public int Age { get; set; }
  [JsonIgnore]
  public bool Foo { get; set; }

}

参考: Ignore individual properties

从表单中,您可以使用 Bind 属性来指定您想要的 属性 return:

public IActionResult PostData([Bind("Name,Age")][FromForm]PersonOptions data)
{}

文档 state:

All public read-write properties of the type are bound

如果 属性 是 public,则出于某种原因,活页夹 运行它 。此外,[JsonIgnore] 不受尊重。

所以除非我遗漏了一些明显的东西,否则这是不可能完成的。

解决方法是:

  • 使用非public 属性
  • 使用方法代替 属性

我已将功能请求添加到 repo 以支持“忽略”属性。

更新:
他们已将功能请求添加到待办事项列表中,所以我认为目前无法完成我想要的。