如何在Windows Phone 8中发送POST请求并在json中获取其响应

时间:2014-05-23 10:21:19

标签: c# post windows-phone-8 windows-phone

我正在尝试调用Web服务 它返回一个JSON响应。到目前为止,我的代码适用于GET请求,但现在服务器上的服务是POST,我不知道如何做到这一点!以下是GET请求的代码:

 private void callSigninWebservice()
        {
            setProgressIndicator(true);

            SystemTray.ProgressIndicator.Text = "Signing in please wait";
            try
            {
                WebClient webClient = new WebClient();
                Uri uri = new Uri(GlobalVariables.URL_USER +
                GlobalVariables.URL_STUDENT_SIGNIN_MODE_LOGIN +
                GlobalVariables.URL_EMAIL + tbUsername.Text +
                GlobalVariables.URL_PASSWORD + tbPassword.Password);
                webClient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(webClient_DownloadStringCompleted);
                webClient.DownloadStringAsync(uri);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "error came here 1");
            }

        }

回应

void webClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
            try
            {

                JObject parentObj = JObject.Parse(e.Result);
                String strResult = (String)parentObj[SigninData.JSON_result];

                bool bolresult = strResult.Equals(SigninData.JSON_result_success, StringComparison.Ordinal);

                if (bolresult)
                {
                    JObject dataObj = (JObject)parentObj[SigninData.JSON_data];
                    setUserData(dataObj);
                    NavigationService.Navigate(new Uri("/BasePage.xaml", UriKind.RelativeOrAbsolute));

                }
                else
                {
                    String error = (String)parentObj[SigninData.JSON_data];
                    MessageBox.Show("Error : " + error);
                }
                setProgressIndicator(false);
            }
            catch (Exception)
            {
                setProgressIndicator(false);
            }

        }

1 个答案:

答案 0 :(得分:1)

这是一种简单的方法,可以在JSON中发布帖子请求和接收响应以供将来解析:

    internal static async Task<String> GetHttpPostResponse(HttpWebRequest request, string postData)
    {
        String received = null;

        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";

        byte[] requestBody = Encoding.UTF8.GetBytes(postData);

        // ASYNC: using awaitable wrapper to get request stream
        using (var postStream = await request.GetRequestStreamAsync())
        {
            // Write to the request stream.
            // ASYNC: writing to the POST stream can be slow
            await postStream.WriteAsync(requestBody, 0, requestBody.Length);
        }

        try
        {
            // ASYNC: using awaitable wrapper to get response
            var response = (HttpWebResponse)await request.GetResponseAsync();
            if (response != null)
            {
                var reader = new StreamReader(response.GetResponseStream());
                // ASYNC: using StreamReader's async method to read to end, in case
                // the stream i slarge.
                received = await reader.ReadToEndAsync();
            }
        }
        catch (WebException we)
        {
            var reader = new StreamReader(we.Response.GetResponseStream());
            string responseString = reader.ReadToEnd();
            Debug.WriteLine(responseString);
            return responseString;
        }

        return received;
    }