使用.Net Core Web API和JsonPatchDocument

时间:2016-04-21 11:08:01

标签: asp.net-core json-patch

我正在使用JsonPatchDocument来更新我的实体,如果JSON看起来如下

,这种效果很好
[
  { "op": "replace", "path": "/leadStatus", "value": "2" },
]

当我创建对象时,它使用Operations节点

转换它
var patchDoc = new JsonPatchDocument<LeadTransDetail>();
patchDoc.Replace("leadStatus", statusId); 

{
  "Operations": [
    {
      "value": 2,
      "path": "/leadStatus",
      "op": "replace",
      "from": "string"
    }
  ]
}

如果JSON对象看起来像Patch不起作用。我相信我需要使用

转换它
public static void ConfigureApis(HttpConfiguration config)
{
    config.Formatters.Add(new JsonPatchFormatter());
}

这应该解决,问题是我使用.net核心所以不是100%确定在哪里添加JsonPatchFormatter

1 个答案:

答案 0 :(得分:2)

我使用ASP.NET Core 1.0版创建了以下示例控制器。如果我发送您的JSON-Patch-Request

[
  { "op": "replace", "path": "/leadStatus", "value": "2" },
]

然后在调用ApplyTo之后,属性leadStatus将被更改。无需配置JsonPatchFormatter。 Ben Foster的一篇好博客文章帮助我获得了更加扎实的理解 - http://benfoster.io/blog/aspnet-core-json-patch-partial-api-updates

public class PatchController : Controller
{
    [HttpPatch]
    public IActionResult Patch([FromBody] JsonPatchDocument<LeadTransDetail> patchDocument)
    {
        if (!ModelState.IsValid)
        {
            return new BadRequestObjectResult(ModelState);
        }


        var leadTransDetail = new LeadTransDetail
        {
            LeadStatus = 5
        };

        patchDocument.ApplyTo(leadTransDetail, ModelState);

        if (!ModelState.IsValid)
        {
            return new BadRequestObjectResult(ModelState);
        }

        return Ok(leadTransDetail);
    }
}

public class LeadTransDetail
{
    public int LeadStatus { get; set; }
}

希望这有帮助。