WCF receiving empty int
本文关键字:int empty receiving WCF | 更新日期: 2023-09-27 18:09:10
由于某些原因,我的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视为空字符串?
好了,伙计们,我在处理了一些更复杂的对象后发现了这个问题。
我需要将我的WebInvoke的BodyStyle属性设置为WrappedRequest以获得正确的反序列化。
现在我的服务函数是这样的
[OperationContract]
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, UriTemplate = "/Products", ResponseFormat = WebMessageFormat.Json)]
public Product GetProduct(string id)
{
int ID = Convert.ToInt32(id);
Product selectedProduct = db.Products.Find(ID);
return selectedProduct;
}
您需要指定数据类型和类型为:
$.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);
}
});
如果你只需要传递一个id
,那么试着用URL传递它。
var id = 1;
url: "ShopService.svc/Product/" + id;
尝试直接发送整数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);
}
});