【问题标题】:How to Send POST Request in windows Phone 8 and get its Response in json如何在 Windows Phone 8 中发送 POST 请求并在 json 中获取其响应
【发布时间】:2014-05-23 10:21:18
【问题描述】:

我正在尝试调用网络服务 它返回一个 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);
            }

        }

【问题讨论】:

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


【解决方案1】:

这是一种发出 post 请求并以 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;
    }

【讨论】:

  • 'System.Net.HttpWebRequest' 不包含'GetRequestStreamAsync' 的定义,并且找不到接受'System.Net.HttpWebRequest' 类型的第一个参数的扩展方法'GetRequestStreamAsync'(你是缺少 using 指令或程序集引用?)这是我得到的错误
  • 请从 NuGet 安装 Microsoft HTTP 客户端库,这应该可以解决您的问题。
  • @Meneses,Microsoft HTTP 客户端库似乎适用于 wp8.1 而不是 wp8
  • @eeadev 关于当前版本,您似乎是对的。如果你想在 Windows Phone 8 中使用它,你可以随时使用 NuGet 命令Install-Package Microsoft.Net.Http -Version 2.2.19,因为这个版本仍然支持 Windows Phone 8。
  • @Meneses,我是 C# 新手,在这种情况下使用什么子句?
猜你喜欢
  • 2019-02-23
  • 1970-01-01
  • 2014-09-29
  • 2018-05-27
  • 2018-03-20
  • 2011-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多