Отправьте StringContent и StreamContent в том же сообщении на сервер - PullRequest
0 голосов
/ 28 января 2019

Я хотел бы отправить строковые параметры и файл на веб-сервер.у меня есть ошибка с 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 голосов
/ 28 января 2019

При передаче fileStream в качестве параметра конструктору StreamContent он становится владельцем.Т.е. при удалении filestreamContent он также удаляет fileStream.При добавлении filestreamContent к контенту он также становится владельцем, т. Е. При утилизации контента он проходит по всем частям, а затем удаляет их.

И HttpClient.PostAsync в конце концов вызовет приватную функцию HttpClient.DisposeRequestContent, которая, в свою очередь, удаляет содержимое, которое закрывает и удаляет все связанные потоки.Это сделано специально.

Вы просто видите конечный результат, и, насколько я могу судить, вы не получаете никаких ошибок или исключений, кроме случаев, когда пытаетесь получить доступ к членам теперь расположенных объектов вотладчик.

...