【问题标题】:Asp.net Web Api 2 - Which Json properties were passed to my controller?Asp.net Web Api 2 - 哪些 Json 属性已传递给我的控制器?
【发布时间】: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


    【解决方案1】:

    我相信您可能正在寻找PATCH。 也许这可以帮助: http://techbrij.com/http-patch-request-asp-net-webapi

    【讨论】:

    • 感谢您的回复 - PATCH 可能是正确的解决方案 - 我试图让使用 API 的人保持简单 - 因为 PATCH 请求的构造比 PUT 更复杂
    猜你喜欢
    • 2020-06-26
    • 2011-04-08
    • 2016-09-26
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    相关资源
    最近更新 更多