由于某种原因,我的wcf服务没有正确地从我的POST接收数据。
它给了我这个错误:
服务器在处理请求时遇到错误。异常消息是'反序列化System.Int32类型的对象时出错。值''无法解析为'Int32'类型。'
ajax请求如下所示:
$.ajax({
method: "POST",
contentType: "application/json",
url: "ShopService.svc/Product",
async: false,
data: JSON.stringify({ id: 1 }),
success: function (data) {
returndata = data;
},
error: function (jqXHR, status, error) {
alert(error);
}
});
服务代码是这样的:
[OperationContract]
[WebInvoke(UriTemplate = "/Product", Method = "POST", ResponseFormat = WebMessageFormat.Json)]
public Product GetProduct(int id)
{
Product selectedProduct = db.Products.Find(id);
return selectedProduct;
}
我不知道这里出了什么问题,为什么服务器将id视为空字符串?
答案 0 :(得分:0)
您需要指定数据类型并键入:
$.ajax({
contentType: "application/json; charset=utf-8",
url: "ShopService.svc/Product",
data: JSON.stringify({ id: 1 }),
type: "POST",
dataType: "json",
success: function (data) {
returndata = data;
},
error: function (jqXHR, status, error) {
alert(error);
}
});
希望它有效。
答案 1 :(得分:0)
如果您只需传递id
,请尝试使用网址传递它。
var id = 1;
url: "ShopService.svc/Product/" + id;
答案 2 :(得分:0)
尝试直接发送整数1并删除内容类型,而不是发送一个字段id和值为1的json对象,因为服务需要整数而不是对象
$.ajax({
method: "POST",
url: "ShopService.svc/Product",
async: false,
data: 1,
success: function (data) {
returndata = data;
},
error: function (jqXHR, status, error) {
alert(error);
}
});
答案 3 :(得分:0)
好吧,伙计们,我在处理了一些更复杂的物品后想出来了。
我需要将WebInvoke的BodyStyle属性设置为WrappedRequest以获得正确的反序列化。
所以现在我的服务功能如下:
a = np.random.randn(1000, 1000)
%timeit np.linalg.norm(a[1:2] - a, axis=1)
# 100 loops, best of 3: 5.43 ms per loop
%timeit np.sqrt(((a[1:2] - a) ** 2).sum(1))
# 100 loops, best of 3: 5.5 ms per loop
%timeit cdist(a[1:2], a)[0]
# 1000 loops, best of 3: 1.38 ms per loop
# check that all 3 methods return the same result
d1 = np.linalg.norm(a[1:2] - a, axis=1)
d2 = np.sqrt(((a[1:2] - a) ** 2).sum(1))
d3 = cdist(a[1:2], a)[0]
assert np.allclose(d1, d2) and np.allclose(d1, d3)