给定以下代码;
public static void Upload(Uri target, Stream content)
{
var request = (HttpWebRequest)WebRequest.Create(target);
request.UseDefaultCredentials = true;
request.Method = WebRequestMethods.Http.Put;
request.ContentType = "application/octet-stream";
using (Stream requestStream = request.GetRequestStream())
{
content.CopyTo(requestStream);
}
using (var response = (HttpWebResponse)request.GetResponse())
{
}
}
我看到了在特定情况下我没有预料到的结果。
我的上传请求的目标是 SharePoint 系统,如果我上传的文件大到足以导致请求超时,则会WebException
抛出 a(如预期的那样)并显示“操作超时”消息。到目前为止一切都很好。
奇怪的是,如果我重新运行相同的代码(即使在新进程中),然后在它再次超时并再次失败后,该文件实际上出现在目标中。它似乎也没有损坏或部分上传,因为我可以下载它并且它似乎完好无损。
在创建我的请求时我应该指定其他什么东西来防止这种情况发生?我知道我可以通过在超时的情况下仅执行 HEAD 请求来解决此问题,以验证文件是否确实由它组成,但如果可能的话,我更喜欢更健壮的东西。