【问题标题】:c# HttpClient.PostAsync only works oncec# HttpClient.PostAsync 只工作一次
【发布时间】:2018-06-22 01:24:26
【问题描述】:

我正在开发一个 Windows 客户端,用于通过 http post 请求上传大量小文件。 我正在使用 .NET 4.5.2

public async void Upload3(HttpClient client, string url, string[] files)
{
    foreach (var file in files)
    {
        using (var stream = new FileStream(file, FileMode.Open))
        {
            FileInfo info = new FileInfo(file);
            HttpContent fileStreamContent = new StreamContent(stream);
            using (var content = new MultipartFormDataContent())
            {
                content.Add(fileStreamContent);
                var response = await client.PostAsync(url, content);
                response.EnsureSuccessStatusCode();
                //code is stopping at the following line:
                string finalresults = await response.Content.ReadAsStringAsync();
                Console.WriteLine(finalresults);
                Console.WriteLine(" > Uploaded file " + info.Name);
            }
            stream.Close();
        }
    }
    Console.WriteLine("> Uploaded all files");
}

代码在第一个文件中运行良好。但是其他所有文件都没有上传。当我尝试逐步调试代码时,代码执行在这一行停止(在循环的第二次迭代中):

string finalresults = await response.Content.ReadAsStringAsync();

由于服务器日志只显示在单个请求上,我认为错误已经发生在这一行:

var response = await client.PostAsync(url, content);

即使我使用不同的 HttpClient 对象和不同的 FileStream 对象,上传也只适用于第一个文件。 这段代码有什么问题?

【问题讨论】:

  • 你是怎么调用这个函数的?你在awaiting 一直正确吗?
  • 是的。问题不在于它在完成之前就关闭了。它只是在“等待响应...”处停止,几分钟后它会抛出一个通用异常。

标签: c# .net post upload httpclient


【解决方案1】:

根据您的要求,您可以使用 RESTSharp 等第三方库。有很多例子和很好的文档。它也很容易使用。

【讨论】:

  • 谢谢。我会在此期间尝试。但我真的很想了解为什么这不起作用。所以我还在寻找合适的解释。
猜你喜欢
  • 2020-08-05
  • 1970-01-01
  • 1970-01-01
  • 2017-01-06
  • 2018-06-22
  • 2015-09-18
  • 2013-12-31
  • 1970-01-01
  • 2013-09-28
相关资源
最近更新 更多