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 搭建前后端分离项目