MemoryStream из HttpContent без копирования - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь использовать System. Net .Http для запросов POST. Я в порядке с телом ответа HTTP, находящимся в памяти, но мне нужно получить MemoryStream для него. Одним из способов сделать это было бы вызвать HttpContent.GetAsByteArrayAsyn c () и обернуть MemoryStream поверх него, но я думаю, что для этого потребуется скопировать содержимое в отдельный байтовый массив (так как он возвращает Task of byte [] ).

Если тело ответа уже находится в каком-то внутреннем буфере в HttpContent, возможно ли создать MemoryStream поверх этого буфера или как-то вернуть MemoryStream из HttpContent и избежать копирования в отдельный байтовый массив?

Существует также HttpContent.GetAsStreamAsyn c (), но он возвращает обычный поток, а не MemoryStream. Несмотря на то, что это, вероятно, уже экземпляр MemoryStream, я полагаю, небезопасно или целесообразно преобразовывать возвращаемый поток в MemoryStream? (поскольку это детали реализации, которые могут измениться.)

Есть ли другой способ сделать это, или у меня нет другого выбора, кроме как сначала скопировать в byte []?

Спасибо.

1 Ответ

1 голос
/ 19 марта 2020

Если вы сначала позвоните LoadIntoBufferAsync, ReadAsStreamAsync вернет только для чтения MemoryStream:

await req.Content.LoadIntoBufferAsync();
var stream = (MemoryStream) await req.Content.ReadAsStreamAsync();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...