如果要创建 WCF 操作来接收 JSON 输入,则需要定义映射到该输入的数据协定。有一些工具可以自动执行此操作,包括我不久前写的一个工具http://jsontodatacontract.azurewebsites.net/ http://jsontodatacontract.azurewebsites.net/(有关如何编写此工具的更多详细信息,请访问这篇博文 http://blogs.msdn.com/b/carlosfigueira/archive/2012/07/12/creating-asp-net-web-apis-on-azure-web-sites.aspx)。该工具生成了此类,您可以使用它:
// Type created for JSON at <<root>>
[System.Runtime.Serialization.DataContractAttribute()]
public partial class Person
{
[System.Runtime.Serialization.DataMemberAttribute()]
public int age;
[System.Runtime.Serialization.DataMemberAttribute()]
public string name;
[System.Runtime.Serialization.DataMemberAttribute()]
public string[] messages;
[System.Runtime.Serialization.DataMemberAttribute()]
public string favoriteColor;
[System.Runtime.Serialization.DataMemberAttribute()]
public string petName;
[System.Runtime.Serialization.DataMemberAttribute()]
public string IQ;
}
接下来,您需要定义一个操作合约来接收它。由于 JSON 需要放入请求正文中,因此最自然的 HTTP 方法是POST
,因此您可以按如下方式定义操作:方法为“POST”,样式为“Bare”(这意味着您的 JSON 直接映射到参数)。请注意,您甚至可以省略Method
and BodyStyle
属性,因为"POST"
and WebMessageBodyStyle.Bare
分别是它们的默认值)。
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Bare)]
public Person FindPerson(Peron lookUpPerson)
{
Person found = null;
// Implementation that finds the Person and sets 'found'
return found;
}
现在,在该方法中,您已将输入映射到lookupPerson
。如何实现方法的逻辑取决于您。
评论后更新
下面是一个使用 JavaScript(通过 jQuery)调用服务的示例。
var input = '{
"age":100,
"name":"foo",
"messages":["msg 1","msg 2","msg 3"],
"favoriteColor" : "blue",
"petName" : "Godzilla",
"IQ" : "QuiteLow"
}';
var endpointAddress = "http://your.server.com/app/service.svc";
var url = endpointAddress + "/FindPerson";
$.ajax({
type: 'POST',
url: url,
contentType: 'application/json',
data: input,
success: function(result) {
alert(JSON.stringify(result));
}
});