2016-02-03 64 views
0

我想簡單地使用ODATA對我的Web API執行基本的AJAX PUT調用。它真的不應該那麼難,而且我已經有了POST和GET的工作,但是PUT存在問題。使用招,它告訴我:「屬性‘ID’是對象的關鍵信息的一部分,不能進行修改。」這是我在我的項目(我把小提琴家一樣的東西):AJAX PUT調用使用odata返回服務器錯誤

$.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

您是否控制OData服務實施?如果是這樣,你的PUT控制器方法是什麼樣子? – lencharest

+0

這是來自.net api的默認生成代碼。太長的帖子在這裏... – Dan

+0

你用什麼工具生成代碼? – lencharest

回答

1

您不發送Id屬性作爲data(有效負載)的一部分。我猜測導致服務器端的Id被反序列化爲null0,這很可能與url中的實體鍵的值不匹配。因此,服務器上的代碼認爲您正試圖修改Id的值。 (請參閱「更新實體」在Create an OData v4 Endpoint Using ASP.NET Web API 2.2Put方法,其比較實體鍵在請求有效載荷中的Id屬性的一個例子。)

嘗試添加Id屬性data如下:

data: JSON.stringify({ 
    "Id": key_value 
    "Outcome": callResult, 
    "CallTimes": timeTried, 
}) 

其中key_value是在url中用作實體鍵的值。

+0

是的,這是有道理的。通常情況下,我認爲odata URL查詢需要使用像http:// localhost:11064/odata/ContactInfoes(4)這樣的url id部分來處理,但該錯誤似乎已被另一個替換。謝謝! – Dan

相關問題