我有这样的服务:
[ServiceContract]
public interface IService
{
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "DoWork", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
Person DoWork(Person person);
}
服务实施如下:
public class Service : IService
{
public Person DoWork(Person person)
{
//To do required function
return person;
}
}
我的Person
类型定义是:
[DataContract]
public class Person
{
[DataMember]
public string Name { get; set; }
}
我尝试使用jQuery来使用此服务:
var data = { 'person': [{ 'Name': 'xxxxx'}] };
$.ajax({
type: "POST",
url: URL, // Location of the service
data: JSON.stringify(data), //Data sent to server
contentType: "application/json", // content type sent to server
dataType: "json", //Expected data format from server
processData: false,
async: false,
success: function (response) {
},
failure: function (xhr, status, error) {
alert(xhr + " " + status + " " + error);
}
});
我可以使用此方法调用服务,但服务方法Person
的参数(DoWork
对象)始终为NULL。我该如何解决这个问题?
答案 0 :(得分:1)
您的JavaScript data
对象构造错误 - 应该是:{ 'person': { 'Name': 'xxxxx' } }
此外,您还可以选择构建JavaScript对象的替代方法。解决方案(在我看来不太容易出错)是以更标准的方式构建对象(更多的代码,但更少的机会被混淆并犯错误 - 特别是如果对象具有高复杂性):
var data = new Object();
data.person = new Object();
data.person.Name = "xxxxx";
最后一件事是,您错过了设置发送到服务操作和从服务操作发送的消息的正文样式:
[WebInvoke(... BodyStyle = WebMessageBodyStyle.Wrapped)]