从Android发布到WCF REST Web服务:如何检索传递的json数据

时间:2011-06-17 10:25:37

标签: android wcf json post

我正在尝试从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服务中检索传递数据的方法是什么?

提前致谢!

3 个答案:

答案 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

的Web API中发生变化

答案 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)

对不起我没有回答:

  1. j0nSn0w做了什么改变 request.setEntity(new UrlEncodedFormEntity(nameValuePairs));
  2. 如果j0nSn0w认为'嗯,最后如果你知道怎么做就结果很容易:)';请发布您的解决方案。
  3. 我与j0nSn0w在6月17日的类似绑定,只能找到这个线程作为建设性指针。

    保持实际解决方案不在票证中似乎有悖常理。