【问题标题】:How to get the HTTP Status Code returned with WinPhone WebClient?如何获取 WinPhone WebClient 返回的 HTTP 状态码?
【发布时间】:2013-04-02 16:01:34
【问题描述】:

我需要向 HTTP 服务器发送一段文本。我需要确定是否已成功发送,而不是发送到强制门户或类似的。由于 HTTP 服务器的一些限制,我最好的方法是确保返回的 HTTP 状态码是 200。

如何获取服务器返回的 HTTP 状态码?

这是我当前的代码:

        WebClient client = new WebClient();
        client.Headers["Content-Type"] = "text/xml";
        client.Encoding = Encoding.UTF8;
        bool? result=null;
        try
        {
            client.UploadStringAsync(server, "POST", data);
            client.UploadStringCompleted += (s, e) =>
                {
                    result=e.Error == null;
                };
        }
        catch { }

目前e.Error 将在服务器返回 400-500 错误代码时设置,但如果服务器返回 300 系列 HTTP 状态代码则不会设置。

【问题讨论】:

  • 问题:您的服务器是否正确返回 HTTP 代码? e.Result 包含实际响应
  • @ADNow e.Result 当前将为空白如果成功。如果状态码为 200,则唯一表示成功。我们正在尝试检测手机是否位于强制门户中,但这会重定向所有流量
  • 我认为 WebClient 被简化了。你能潜得更深吗?如果你使用 HttpWebRequest,你可以得到状态码 var response = we.Response as HttpWebResponse; var code = response.StatusCode;
  • @ADNow 做出比我会接受的答案,特别是如果您快速转换我现有的代码:)

标签: c# http windows-phone-8 windows-phone webclient


【解决方案1】:

我没有机会测试这段代码,但是,它可能会给你一两个想法:

 string data;

        var request = HttpWebRequest.Create("http://yourserver") as HttpWebRequest;
        request.Accept = "text/xml";
        request.Headers.Add("Accept-Charset", "utf-8");

        try
        {
            var response = await Task.Factory.FromAsync<WebResponse>(request.BeginGetResponse, request.EndGetResponse, null);

            // do something with your data, e.g. read it, deserialize it
            using (var responseStream = response.GetResponseStream())
            {
                using (var reader = new StreamReader(responseStream))
                {
                    data = reader.ReadToEnd();
                }
                // ....
            }

            var somethingInteresting = response as HttpWebResponse;
            Debug.WriteLine("Status is {0}", somethingInteresting.StatusCode);
        }
        catch (WebException ex)
        {
            var errorResponse = ex.Response as HttpWebResponse;
            var errorHttpStatusCode = errorResponse.StatusCode;

            Debug.WriteLine("Here's your error Http status: {0}", ex.Status);
        }

【讨论】:

  • 嘿,所有这一切最有趣的是,Windows Phone 实际上违反了 HTTP 规范的一部分,这种 WebClient 行为“如果收到 302 状态代码以响应除 GET 或HEAD,除非用户可以确认,否则用户代理不得自动重定向请求,因为这可能会改变发出请求的条件。”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-03
  • 2012-06-16
  • 2021-08-28
  • 2017-05-13
  • 1970-01-01
  • 1970-01-01
  • 2021-10-11
相关资源
最近更新 更多