我遇到的问题是,在重试请求后,我的 POST 数据不知何故丢失了。下面的代码示例。(请注意,request.timeout = 1 设置用于测试目的,以重现以下代码中显示的行为):
//post_data_final getting
private void request_3()
{
for(int i=1; i<=5; i++)
{
byte[] byteArray = Encoding.ASCII.GetBytes(post_data_final);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(site_URI);
request.Method = "POST";
//some headers info
request.Timeout = 1;
request.ContentLength = byteArray.Length;
using (Stream os = request.GetRequestStream())
{
os.Write(byteArray, 0, byteArray.Length);
}
try
{
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
//some code about response
}
catch (WebException wex)
{
if (wex.Status == WebExceptionStatus.Timeout)
{
continue;
}
//some additional checks
}
}
}
神奇的是第一个请求(直到请求超时错误)进展顺利。进一步的请求在没有POST 数据的情况下进行,但内容长度被正确计算(即与之前的请求保持相同)。
更新:
- post_data_final 获取是单独的功能。它没有被使用(除了 byteArray)或在 request_3() 函数中改变。
- 如果请求进入 for 循环并且没有发生超时异常,则请求工作正常。因此,如果我只是将我的请求放入 for 循环中,它将执行特定数量的有效请求。一旦我收到超时异常,下一个请求将没有 POST 数据。
- 源代码是为那些认为递归是一个坏主意的人编辑的。编辑后的代码仍然不起作用。
任何建议表示赞赏