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