我正在使用WCF Rest服务和post方法,如下所示
[OperationContract]
[WebInvoke(Method = "POST",
BodyStyle = WebMessageBodyStyle.Bare,
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
UriTemplate = "/SampleMethod")]
int SampleMethod(SampleObject sampleObject);
并从Javascript调用此服务,如下所示,
$.ajax({
type: 'POST',
url: 'http://localhost/SampleService/SampleService.svc/SampleMethod',
data: object,
contentType: "application/json; charset=utf-8",
dataType: "json",
processdata: true,
success: successCallback, //On Successfull service call
error: serviceFailed// When Service call fails
});
对象是格式
的格式化json{“sampleObject”:{“ID”:1,“名称”:“ABC”,“数据”:“示例数据”}}
在我尝试使用的示例上方,但在服务端,所有对象字段(ID,Name,Data)均为null。我没有遇到问题。
答案 0 :(得分:3)
这是将属性设置为null,因为您实际上是一个“包装”对象 - 您发送它的JSON有一个带有属性的对象(sampleObject),它是另一个对象,它是您的SampleObject。
因此,您有两种方法可以解决这个问题。
选项1
您可以将请求格式设置为包含在服务上,因此只需将操作合同的属性更改为以下内容:
[WebInvoke(Method = "POST",
BodyStyle = WebMessageBodyStyle.WrappedRequest,
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
UriTemplate = "/SampleMethod")]
选项2
更改字符串化对象的代码,以便它创建此JSON:
{"ID":1, "Name":"ABC", "Data":"Sample data"}
由于你只是发送一个参数,我个人会选择2,因为它可以为你节省一些空间。如果你想发送多个参数,我认为你只需要“包装”样式。
答案 1 :(得分:2)
感谢您的回复。我发现了自己的错误。数据类型不匹配存在问题。像int有一个值空白字符串,也有日期格式的问题。