6

I am using JsonPatchDocument to update my entities, this works well if the JSON looks like the following

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

When i create the object it converts it with the Operations node

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

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

if the JSON object looks like that the Patch does not work. I believe that i need to convert it using

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

And that should sort it out, the problem is i am using .net core so not 100% sure where to add the JsonPatchFormatter

1 Answer 1

5

I created the following sample controller using the version 1.0 of ASP.NET Core. If I send your JSON-Patch-Request

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

then after calling ApplyTo the property leadStatus will be changed. No need to configure JsonPatchFormatter. A good blog post by Ben Foster helped me a lot in gaining a more solid understanding - 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; }
}

Hope this helps.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.