繁体   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