我正在尝试使用ODATA对我的Web API进行基本的AJAX PUT调用。它真的不应该那么难,我已经有POST和GET工作,但PUT存在问题。使用Fiddler,它告诉我:“属性'Id'是对象关键信息的一部分,无法修改。”这是我在项目中的内容(同样我放在小提琴手中):
$.ajax({
url: url,
type: "PUT",
contentType: "application/json",
dataType: "json",
data: JSON.stringify({
"Outcome": callResult,
"CallTimes": timeTried,
}),
success: function (data) {
alert("Saved to database!");
},
error: function (xhr, status, err) {
alert("Failed to save: " + xhr + "\n" + status + "\n" + err);
}
});
答案 0 :(得分:1)
您没有将Id
属性作为data
(有效负载)的一部分发送。我猜这会导致服务器端的Id
被反序列化为null
或0
,这很可能与您{中的实体密钥的值不匹配{1}}。因此,服务器上的代码认为您正在尝试修改url
的值。 (参见"更新实体"在Create an OData v4 Endpoint Using ASP.NET Web API 2.2中获取Id
方法的示例,该方法将实体密钥与请求有效负载中的Put
属性进行比较。)
尝试将Id
属性添加到Id
,如下所示:
data
其中data: JSON.stringify({
"Id": key_value
"Outcome": callResult,
"CallTimes": timeTried,
})
是key_value
中用作实体键的值。