答案 0 :(得分:33)
在要发送给服务的JSON中使用双引号而不是单引号。也就是说,改变:
data: "{'customerId': '2'}",
到
data: '{"customerId": "2"}',
我在本地测试了这个,这解决了这个问题。
顺便说一句,我使用我在使用内置ASP.NET工具以外的库调用ASMX和WCF服务时经常使用的方法对此进行了调试。我使用由asp:ScriptReference创建的客户端代理调用该服务,然后使用HTTP嗅探器(例如FireFox的HttpFox)检查发送到服务器的请求,并将请求与正在发送的请求进行比较由jQuery。然后,您通常可以快速查看请求的不同之处(也可能是错误的)。在这种情况下,很明显发送的POST数据存在差异。
答案 1 :(得分:2)
我只是认为发布对于用户名和密码登录功能至关重要,所以这就是我对发送给Web服务的JSon参数进行编码的方式......
这是Webservice合同..
[ServiceContract]
public interface ILogonService
{
[OperationContract]
[WebInvoke(
Method = "POST",
BodyStyle = WebMessageBodyStyle.WrappedRequest,
ResponseFormat = WebMessageFormat.Json
)]
string Logon(string un, string pw);
}
这是JQuery(注意使用“和'很重要!)
$.ajax({
type: 'POST',
url: "/LogonService.svc/Logon",
data: '{ "un": "' + $('#un').val() + '", "pw": "' + $('#pw').val() + '"}',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
}
});
答案 2 :(得分:1)
我在jscript中做了一个函数,解决了通过POST将数据发送到WCF服务的问题...按照代码...
function formatJsonDataToWCFPost(d){
var t = {};
var a = '{';
for (var j = 0; j < d.length; j++) {
var x = d[j];
for (var i in x) {
if (x.hasOwnProperty(i)) {
var c = j + 1 == d.length ? '}' : ',';
a += ('"' + i + '":"' + x[i] + '"' + c);
}
}
}
return a;
}
答案 3 :(得分:0)
我认为你的操作需要这个属性:
[WebInvoke(Method="POST",
BodyStyle=WebMessageBodyStyle.Wrapped,
ResponseFormat=WebMessageFormat.Json
)]
有关详细信息,请参阅jQuery AJAX calls to a WCF REST Service。