簡體   English   中英

通過JSON發送長整數(Int64)到WCF數據服務

[英]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.1918989

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM