在同一帖子中将StringContent和StreamContent发送到服务器

时间:2019-01-28 16:00:41

标签: c# filestream pushstreamcontent

我想将字符串参数和文件发送到Web服务器。我在streamContent上有错误 这是我的代码

using (var client = new HttpClient())
{
  using (var content = new MultipartFormDataContent())
  {
   content.Add(new StringContent("loginTest"), "login");
   content.Add(new StringContent("toto"), "username");
   using (fileStream = new FileStream("C:\\test.pdf", FileMode.Open, 
          FileAccess.Read, FileShare.Read, 4096, useAsync: true))
    {
     var filestreamContent = new StreamContent(fileStream, 4096);
     content.Add(filestreamContent, "documentUpload", "test.pdf");

     using (var message = client.PostAsync("http://serverUrl/Create? 
      method=init", content))
     {
      var input = message.Result.Content.ReadAsStringAsync().Result;
      }
    }
   }
 }

,这是一个带错误的屏幕截图:System.ObjectDisposedException https://i.imgur.com/IHspYbB.jpg

1 个答案:

答案 0 :(得分:0)

当将fileStream作为参数传递给StreamContent的构造方法时,它将拥有所有权。即处置filestreamContent时,还将处置fileStream。在将filestreamContent添加到内容时,它也拥有所有权,即,在处理内容时,它将遍历所有部分,然后也进行处理。

并且HttpClient.PostAsync最后将调用私有函数HttpClient.DisposeRequestContent,该函数依次处理内容,这将关闭并处理所有关联的流。这是设计使然。

您只是看到最终结果,据我所知,除了尝试访问调试器中已放置的对象的成员之外,您没有任何错误或异常。

相关问题