我正在尝试从Android客户端联系RESTful WCF POST Web服务,该客户端应以json格式传递一些数据。我已经成功地联系了RESTful WCF GET Web服务,但我无法弄清楚POST版本是如何工作的。
这是进行调用的android客户端代码:
HttpPost request = new HttpPost(uri);
request.setHeader("Accept", "application/json");
request.setHeader("Content-type", "application/json");
/*... Building the NameValuePairs object ... */
request.setEntity(new UrlEncodedFormEntity(nameValuePairs));
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(request);
/* ... handling the response ...*/
这是WCF Web服务代码:
[WebInvoke(Method = "POST",
UriTemplate = "ServiceActivation",
BodyStyle = WebMessageBodyStyle.WrappedRequest,
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json)]
string MyPostMethod();
public string MyPostMethod()
{
try
{
/*...*/
}
catch (Exception e)
{
/*...*/
}
}
通过这种方式,android客户端成功联系了Web服务;但我不知道如何在MyPostMethod中检索从android客户端传递的数据。像这样:MyPostMethod(字符串数据)以来自android客户端的错误请求结束。
那么,在Web服务中检索传递数据的方法是什么?
提前致谢!
答案 0 :(得分:1)
您必须为发布的数据定义data contract - 通常是一类或一组相关类,用于反序列化JSON消息并将该类用作输入参数。 Here is example如何在没有WCF服务的情况下使用数据合同 - 它可以帮助您为消息定义正确的合同。
编辑:
我刚注意到您发布的是url编码值 - 这不是JSON请求,而且它的内容类型不同:application/x-www-form-urlencoded
。 WCF的JSON请求是在请求内容中传递的JSON。在WCF中使用URL编码的请求是hard。这将在has support for these requests。
答案 1 :(得分:0)
Gson可以很容易地在Android中构建json消息。
LoginToWebSiteRequest loginToWebSiteRequest = new LoginToWebSiteRequest();// a pojo based on some json message
loginToWebSiteRequest.setEmail(email);
loginToWebSiteRequest.setPassword(password);
Gson gson = new Gson();
String json = gson.toJson(loginToWebSiteRequest,LoginToWebSiteRequest.class);
HttpPost httpPost = new HttpPost(loginUrl);
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-type", "application/json; charset=UTF-8");
答案 2 :(得分:0)
对不起我没有回答:
request.setEntity(new UrlEncodedFormEntity(nameValuePairs));
我与j0nSn0w在6月17日的类似绑定,只能找到这个线程作为建设性指针。
保持实际解决方案不在票证中似乎有悖常理。