如何重新发出网络请求?我必须重新创建 Webclient 吗?
Posted
技术标签:
【中文标题】如何重新发出网络请求?我必须重新创建 Webclient 吗?【英文标题】:How do I reissue a webrequest? Must I recreate Webclient? 【发布时间】:2013-11-08 16:27:15 【问题描述】:当遇到异常时,以下代码会卡在 while 循环中。这是因为 GetResponse 正在缓存数据。
按照fiddler的说法,第一次请求发出后就没有数据了。
重新创建 Web 客户端以解决我遇到的“刷新”问题是最佳做法吗?
private static ReportStatusEnum GetReportStatus(string domain, string oAuthKey, long permissionReportID)
string target = string.Format("https://0.egnyte.com/pubapi/v1/audit/jobs/1", domain, permissionReportID);
var client = new WebClient();
string result ="";
var request = (HttpWebRequest)WebRequest.Create(target);
request.ContentType = "application/json";
request.Headers.Add("Authorization", "Bearer " + oAuthKey);
request.AllowAutoRedirect = false;
bool callComplete = false;
while (callComplete != true)
try
using (var response = request.GetResponse())
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
result = reader.ReadToEnd();
JToken result2 = JObject.Parse(result);
var statusResult = result2.SelectToken("status");
ReportStatusEnum ret = ReportStatusEnum.error;
Enum.TryParse<ReportStatusEnum>(statusResult.ToString(), out ret);
Console.WriteLine("The returned variable is:" + ret);
callComplete = true;
return ret;
catch (System.Net.WebException e)
if (e.Response != null)
if (e.Response.ContentLength > 0)
if (e.Response.Headers["X-Mashery-Error-Code"] == "ERR_403_DEVELOPER_OVER_QPS")
Thread.Sleep(60000); Console.Write("*QPS HIT*");
return ReportStatusEnum.error;
【问题讨论】:
你为什么还要有一个WebClient?你没有用它做任何事情。如果您使用的是WebRequest.Create
,则不需要无所事事的 WebClient。
删除未使用的client
变量,并将WebRequest.Create(target)
移动到循环中。
【参考方案1】:
没有。 HttpWebRequests 不可重用。
只需将 WebRequest 的创建移动到循环主体中:
string result ="";
bool callComplete = false;
while (callComplete != true)
var request = (HttpWebRequest)WebRequest.Create(target);
request.ContentType = "application/json";
request.Headers.Add("Authorization", "Bearer " + oAuthKey);
request.AllowAutoRedirect = false;
//...
【讨论】:
以上是关于如何重新发出网络请求?我必须重新创建 Webclient 吗?的主要内容,如果未能解决你的问题,请参考以下文章