Замените HttpWebRequest на HttpClient - PullRequest
0 голосов
/ 13 июня 2019

По этой причине https://github.com/dotnet/corefx/issues/11873#issuecomment-470611032

Я пытаюсь заменить HttpWebRequest на HttpClient

HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url);
wr.AllowWriteStreamBuffering = false;

using (var requestStream = await wr.GetRequestStreamAsync().ConfigureAwait(false))
{
    await this.ZipFilesIntoStream(fileEntries, requestStream).ConfigureAwait(false);
}

И я не могу найти руководство о том, как получить поток с HttpClient.

using (var memoryStream = new MemoryStream())
using (var requestStream = await wr.GetRequestStreamAsync().ConfigureAwait(false))
{
    await HttpClient.PostAsync(url, new StreamContent(memoryStream)
    {
    }).ConfigureAwait(false);

    await this.ZipFilesIntoStream(fileEntries, requestStream).ConfigureAwait(false);
}

1 Ответ

1 голос
/ 13 июня 2019

Код пытается использовать HttpClient, как если бы это был HttpWebRequest. Однако HttpClient не представляет запрос . Это класс, который выполняет разные методы HTTP. Содержимое должно быть подготовлено за до вызова PostAsync, GetAsync или общего SendAsync

Я предполагаю, что ZipFilesIntoStream упаковывает файлы в поток. Поскольку MemoryStream также доступен, он должен использовать его в качестве хранилища:

using (var memoryStream = new MemoryStream())
{
    await ZipFilesIntoStream(fileEntries, memoryStream);
    memoryStream.Position=0;
    await client.PostAsync(url, new StreamContent(memoryStream));
}
...