HTTP Web请求发送了两次(如何修复?)

本文关键字:两次 Web 何修复 HTTP 请求 | 更新日期: 2023-09-27 18:25:45

我有以下代码来执行web请求和获取HTTP响应。我想做的是,如果HTTP响应是

200 OK

我需要在不再次发送web请求的情况下读取响应正文(我知道我的代码目前正在发送两次)。

        try
        {
            using (WebResponse response = request.GetResponse())
            {
                HttpWebResponse httpResponse = (HttpWebResponse)response;
                if (httpResponse.StatusCode == HttpStatusCode.OK)
                {
                    using (var webClient = new WebClient())
                    {
                        string result = webClient.DownloadString(request.RequestUri);
                        if(result.StartsWith("NUMBER NOT IN LIST"))
                        {
                            return "Number Not In List";
                        }
                        return result;
                    }
                }
                else if (httpResponse.StatusCode == HttpStatusCode.Unauthorized)
                {
                    return statusCode = HttpStatusCode.Unauthorized.ToString();
                }
                else if (httpResponse.StatusCode == HttpStatusCode.BadRequest)
                {
                    return statusCode = HttpStatusCode.BadRequest.ToString();
                }
            }
        }

HTTP Web请求发送了两次(如何修复?)

读取响应流:

    try
    {
        using (WebResponse response = request.GetResponse())
        {
            HttpWebResponse httpResponse = (HttpWebResponse)response;
            if (httpResponse.StatusCode == HttpStatusCode.OK)
            {
                StreamReader reader = new StreamReader(response.GetResponseStream());
                string result = reader.ReadToEnd();
                if(result.StartsWith("NUMBER NOT IN LIST"))
                {
                    return "Number Not In List";
                }
                return result;
            }
            else if (httpResponse.StatusCode == HttpStatusCode.Unauthorized)
            {
                return statusCode = HttpStatusCode.Unauthorized.ToString();
            }
            else if (httpResponse.StatusCode == HttpStatusCode.BadRequest)
            {
                return statusCode = HttpStatusCode.BadRequest.ToString();
            }
        }
    }

您想要使用HttpWebResponse.GetResponseStream,如下所示:

HttpWebResponse.GetResponseStream方法

使用MSDN页面上的示例替换if (httpResponse.StatusCode == HttpStatusCode.OK)的内容。

if (httpResponse.StatusCode == HttpStatusCode.OK)
{
  // we will read data via the response stream
  var resStream = httpResponse.GetResponseStream();
  var sr = new StreamReader(resStream);
  var result = sr.ReadToEnd();
}