C# 如何重新发出webrequest?我必须重新创建Webclient吗?
当遇到异常时,以下代码会卡在while循环中。这是因为GetResponse正在缓存数据 根据fiddler的说法,在发出第一个请求后没有数据 重新创建webclient以解决我遇到的“刷新”问题是最佳做法吗C# 如何重新发出webrequest?我必须重新创建Webclient吗?,c#,caching,webclient,system.net.webexception,webexception,C#,Caching,Webclient,System.net.webexception,Webexception,当遇到异常时,以下代码会卡在while循环中。这是因为GetResponse正在缓存数据 根据fiddler的说法,在发出第一个请求后没有数据 重新创建webclient以解决我遇到的“刷新”问题是最佳做法吗 private static ReportStatusEnum GetReportStatus(string domain, string oAuthKey, long permissionReportID) { string target = string
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;
}
私有静态ReportStatusEnum GetReportStatus(字符串域、字符串oAuthKey、长权限ReportId)
{
string target=string.Format(“https://{0}.egnyte.com/pubapi/v1/audit/jobs/{1}”,域,permissionReportID);
var client=new WebClient();
字符串结果=”;
var request=(HttpWebRequest)WebRequest.Create(target);
request.ContentType=“application/json”;
添加(“授权”、“持有人”+oAuthKey);
request.AllowAutoRedirect=false;
bool callComplete=false;
while(callComplete!=true)
{
尝试
{
使用(var response=request.GetResponse())
{
使用(StreamReader=newstreamreader(response.GetResponseStream())
{
结果=reader.ReadToEnd();
}
}
JToken result2=JObject.Parse(结果);
var statusResult=result2.SelectToken(“状态”);
ReportStatusEnum ret=ReportStatusEnum.error;
TryParse(statusResult.ToString(),out-ret);
WriteLine(“返回的变量为:”+ret);
callComplete=true;
返回ret;
}
捕获(System.Net.WebException)
{
如果(如响应!=null)
如果(e.Response.ContentLength>0)
{
if(例如,Response.Headers[“X-mashury-Error-Code”]=“ERR\u 403\u DEVELOPER\u OVER\u QPS”)
{
Thread.Sleep(60000);Console.Write(“*QPS HIT*”);
}
}
}
}
返回ReportStatusEnum.error;
}
否。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;
//...
你为什么有网络客户?你什么都没做。如果使用的是
WebRequest.Create
,则不需要WebClient无所事事。删除未使用的client
变量,然后将WebRequest.Create(target)
移动到循环中。