【发布时间】:2017-11-11 10:01:56
【问题描述】:
我有一个客户 dto 模型 - 请参见下面的示例 - 它有很多属性。
public class CustomerDtoModel
{
public string OrganisationName { get; set; }
public string Title { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime? DateOfLastPurchase { get; set; }
// other properties not shown ....
}
Json 被传递到我的 web api 控制器并绑定到模型以更新现有数据,例如
[System.Web.Http.Route("{id:guid}")]
[System.Web.Http.HttpPut]
public IHttpActionResult UpdateCustomer(Guid id, [FromBody] CustomerDtoModel updatedCustomer)
{
// do the update
return Ok();
}
由于有很多属性,我希望允许使用 api 的人只指定他们想要更改的 Json 中的属性 - 例如仅将 LastName 从 Smith 更改为 Jones - 任何不在 Json 中的属性都不会更新现有数据。
我还需要在控制器操作中保留强类型模型名称,以便它们可以出现在我的 Swagger 文档中。
我的问题是清除现有值
在 Json 中传递一个空字符串来清除字符串和 0 用于数字是可以接受的,但我需要一种允许将日期重置为 null 的方法。我可以说传递 0001 年 1 月 1 日的日期会将现有值设置为 null - 但这很笨拙,我希望找到更好的解决方案。
例如,在 MVC 中,我在控制器方法上使用了 FormCollection 参数来了解哪些字段/属性已回发到控制器,这样我就可以避免更改不影响更新的字段。
是否有类似的简洁解决方案可以在 Web Api 中使用?
提前感谢您的任何建议
【问题讨论】:
标签: c# json asp.net-mvc-4 asp.net-web-api2