我有这个数据传输模型:
[DataContract]
[Serializable]
class PersonDTO {
[DataMember(Name="id")]
public int id { get; set; }
[DataMember(Name="name")]
[Required]
public string name { get; set; }
}
我希望能够将此模型用于创建和更新操作。这里的问题是,当创建一个新的 Person 时,它的 id 还不存在(因此缺少 [Required] 注释)。然而,在更新时,id 已经存在,并且需要是必填字段。
在我的控制器中,我有以下操作:
public class PersonController {
[HttpPut]
public void UpdatePerson(PersonDTO person) {}
[HttpPost]
public void CreatePerson(PersonDTO person) {}
}
有没有办法为这两个操作使用相同的 DTO,但为其中一个操作设置字段“id”,所以 ModelState 失败?我知道我可以通过检查手动完成person.id == null
,但我正在寻找一个自动解决方案,如果存在的话。