6

私は自分のエンティティを更新するために使用しています。これは、次のように見える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 オブジェクトがそのように見える場合、パッチは機能しません。を使用して変換する必要があると思います

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

問題は、私が.netコアを使用しているため、どこに追加するか100%わからないことですJsonPatchFormatter

4

1 に答える 1

4

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; }
}

お役に立てれば。

于 2016-07-18T18:09:28.023 に答える