Asp.net Web Api 2 - 哪些 Json 属性已传递给我的控制器?

Posted

技术标签:

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

提前感谢您的任何建议

【问题讨论】:

【参考方案1】:

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

【讨论】:

感谢您的回复 - PATCH 可能是正确的解决方案 - 我试图让使用 API 的人保持简单 - 因为 PATCH 请求的构造比 PUT 更复杂

以上是关于Asp.net Web Api 2 - 哪些 Json 属性已传递给我的控制器?的主要内容,如果未能解决你的问题,请参考以下文章

Web API 2 入门——使用ASP.NET Web API和Angular.js构建单页应用程序(SPA)(谷歌翻译)

Web API系列教材1.3 — 实战:用ASP.NET Web API和Angular.js创建单页面应用程序(下)

如何通过js跨域调用ASP.NET Web API (请问如何实现在javascript中通过http get的方式跨域调用ASP.NET Web API?)

ASP.NET Core 实战:使用 ASP.NET Core Web API 和 Vue.js 搭建前后端分离项目

如何从 JS 获取和保存令牌中获取 ASP.NET Web Api 令牌(登录)

ASP.NET Core 实战:使用 ASP.NET Core Web API 和 Vue.js 搭建前后端分离项目