我正在尝试向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
});
注释掉的属性显示了我尝试过的一些内容。
控制器确实被击中,这不是问题,并且正在发送“Repetitions”属性,但服务器端JsonPatchDocument<TranslationMatchDiscounts>
参数是......
null
如果我将contentType
财产留在原地使用jQuery的.ajax()发送PATCH请求的正确方法是什么?
答案 0 :(得分:2)
我的错。我的印象是PATCH允许我们发布一个只有更改属性的对象,即 ......
{
"Repetitions": 0.15
}
没有。 PATCH需要的是 JSON patch document 。根据RTF:
JSON补丁文档是一个代表一个的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
});