使用odata返回服务器错误调用AJAX PUT

时间:2016-02-03 19:34:04

标签: jquery ajax asp.net-web-api odata

我正在尝试使用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);
    }
});

1 个答案:

答案 0 :(得分:1)

您没有将Id属性作为data(有效负载)的一部分发送。我猜这会导致服务器端的Id被反序列化为null0,这很可能与您{中的实体密钥的值不匹配{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中用作实体键的值。