0

我正在尝试向 Web API 方法发送 AJAX PATCH 请求,并让Marvin.JsonPatch识别修补对象。

到目前为止,我发送到服务器的所有内容都导致收到一个空请求。

Web API 控制器方法如下所示:

public IHttpActionResult Update(ElementType elementType,
                                long elementId,
                                [FromBody] JsonPatchDocument<TranslationMatchDiscounts> matchDiscountsPatch)

TranslationMatchDiscounts对象非常简单:

public class TranslationMatchDiscounts
{
    public double ContextMatches { get; set; }


    public long ElementId { get; set; }


    public Enumerations.ElementType ElementType { get; set; }


    public double ExactMatches { get; set; }


    public double PerfectMatches { get; set; }


    public double Repetitions { get; set; }
}

我的 jQuery AJAX 请求是这样组合的:

$.ajax({
    //contentType: "application/json",
    data: { "Repetitions": 0.15 },
    //data: JSON.stringify({ "Repetitions": 0.15 }),
    dataType: "json",
    //processData: false,
    method: "PATCH",
    url: // my URL
});

注释掉的属性显示了我尝试过的一些东西。

控制器确实被击中,这不是问题,并且正在发送“重复”属性,但服务器端JsonPatchDocument<TranslationMatchDiscounts>参数是......

  • null如果我将contentType房产留在原地
  • 没有其他所有尝试的属性/更新

使用 jQuery 的 .ajax() 发送 PATCH 请求的正确方法是什么?

4

1 回答 1

2

我的错。我的印象是 PATCH 允许我们发布一个仅具有更改属性的对象,...

{
    "Repetitions": 0.15
}

不,PATCH 需要的是JSON 补丁文件。根据 RTF:

JSON Patch 文档是表示对象数组的JSON [ RFC4627 ] 文档。

所以我的例子应该是

var patchDoc = [ { "op": "replace", "path": "/Repetitions", "value": 0.15 } ];

$.ajax({
    contentType: "application/json",
    data: JSON.stringify(patchDoc),
    dataType: "json",
    method: "PATCH",
    url: // my URL
});
于 2017-07-05T15:44:28.760 回答