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();
}
}
}
读取响应流:
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();
}