[英]Sending a long (Int64) via JSON to a WCF Data Service
我無法通過HTTP向WCF數據服務(OData)執行PUT請求。 問題是ID。 它不是自動生成的,因此我無法更改數據庫設置(在這種情況下不允許使用)。 因此,當我嘗試提交ID時,它會發送正確的ID,但不會發送正確的類型...
顯然,該服務期望ID為Int64,並且無法解析我的輸入。 這是代碼:
function OnCreateDisplay() {
$('#DisplayInfoLoader').html('<span style="color: orange;">Creating object....</span>');
$('#DisplayInfoLoader').fadeIn(1000);
var url = "....";
var r = new Object();
r.DisplayID = NextDisplayID+"L";
r.Name = $("#FDisplayName").val();
r.Code = parseInt($("#FDisplayCode").val());
r.Status = $("#FDisplayStatus").val();
r.ProjectID = selected_project+"L";
r.Description = $("#FDisplayDescription").val();
jr = JSON.stringify(r);
alert(jr);
$.ajax({
type: "PUT",
url: url,
data: jr,
contentType: "application/json; charset=utf-8",
success: function (result) {
$('#DisplayInfoLoader').html('<span style="color: green;">Display created....</span>');
$('#DisplayInfoLoader').fadeOut(3000);
},
error: function (xhr, ajaxOptions, thrownError) {
alert(xhr.responseText);
$('#DisplayInfoLoader').html('<span style="color: red;">An Error occured....</span>');
$('#DisplayInfoLoader').fadeOut(3000);
}
});
LoadProjectDisplays();
return false;
}
函數NextDisplayID()
只會獲取最后插入的ID並將其遞增。 它像一種魅力。 我試過在它后面加上+“ L”(WCF很喜歡它了……),但是它不會解析!
我正在發送此JSON字符串:
{"DisplayID":"132L","Name":"Name","Code":"Code","Status":"0","ProjectID":"1L","Description":"Descr"}
在此網址上:“ http://” + ip +“:8989 / Service.svc / Displays(“ + NextDisplayID +” L)“
IP是lan-ip 192.168.0.191
另外,當我繼續玩代碼時,有時會收到“找不到針對“顯示”部分的資源”。 作為錯誤
放置標題:
PUT /Service.svc/Displays(132L)HTTP / 1.1
主機:192.168.0.191:8989
連接:保持活動狀態
內容長度:110
來源: http : //192.168.0.191 : 8989
X-Requested-With:XMLHttpRequest
用戶代理:Mozilla / 5.0(Windows NT 6.0)AppleWebKit / 535.11(KHTML,例如Gecko)
Chrome / 17.0.963.56 Safari / 535.11
內容類型:application / json; 字符集= UTF-8
接受: /
引薦來源: http : //192.168.0.191 : 8989/
接受編碼:gzip,deflate,sdch
接受語言:en-GB,nl; q = 0.8
接受字符集:ISO-8859-1,utf-8; q = 0.7,*; q = 0.3
TEXT:DATA示例{“ DisplayID”:“ 132L”,“名稱”:“ fdsafsda”,“代碼”:“ dsafsda”,“狀態”:“ 0”,“ ProjectID”:“ 1L”,“描述”:“ fdsafsad“}
tnx閱讀本
嘗試使用POST代替PUT ...,因為它也用於創建項目。 您可能需要調整URL,並嘗試使用顯示ID或不使用顯示ID進行發送?
Int64在JSON中序列化為以字符串形式寫入的數字。 因此,例如“ 12345”(包括引號)。 此處對此進行了描述: http : //www.odata.org/developers/protocols/json-format#PrimitiveTypes
請注意,它與URL中使用的格式不同,在URL中,格式是數字,后跟L(您已經在使用)。
對於POST與PUT,它們具有不同的含義。
POST用於創建新實體,並發送到實體集URL,因此... / Displays
PUT用於更新現有實體,並發送到實體實例URL(您要更新的實體),因此... / Displays(1234L)。 還要注意,通常不允許更新鍵屬性(在您的情況下為DisplayID),並且服務器可能會忽略您從客戶端在PUT中發送的值。 因此,在進行PUT的情況下,可以將其從有效載荷中刪除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.