这是因为模型绑定器在将请求的数据绑定到DTO时,会先调用DTO的默认构造函数实例化对象,然后通过属性赋值或者字段赋值的方式将数据绑定到DTO的相应属性或字段上。因此,在实例化对象时,会调用DTO的getter方法获取属性或字段的默认值。
为避免这种情况,可以在DTO中将需要绑定的属性或字段设置为可写的自动属性(public set)或者公共字段(public field),然后模型绑定器就可以直接设置值而无需调用getter方法。
示例代码:
public class MyDto { // 可写的自动属性 public string Name { get; set; }
// 公共字段
public int Age;
}
public IActionResult MyAction([FromBody] MyDto dto) { // do something with dto }