首页 > 解决方案 > 来自 HttpContent 的 MemoryStream 无需复制

问题描述

我正在尝试将 System.Net.Http 用于 POST 请求。我可以接受 HTTP 响应正文在内存中,但需要为其获取 MemoryStream。一种方法是调用 HttpContent.GetAsByteArrayAsync() 并在其上包装 MemoryStream,但我认为这需要将内容复制到单独的字节数组中(因为它返回字节 [] 的任务)。

如果响应主体已经在 HttpContent 的某个内部缓冲区中,是否可以在该缓冲区之上创建 MemoryStream,或者以某种方式从 HttpContent 返回 MemoryStream 并避免复制到单独的字节数组?

还有 HttpContent.GetAsStreamAsync(),但它返回常规 Stream,而不是 MemoryStream。尽管它可能已经是 MemoryStream 的一个实例,但我认为将返回的流转换为 MemoryStream 是不安全的,也不是一种好的做法?(因为这是可能改变的实现细节)。

有没有其他方法可以做到这一点,还是我别无选择,只能先复制到 byte[] 中?

谢谢。

标签: c#httppost.net-coresystem.net

解决方案


如果您LoadIntoBufferAsync先调用,则ReadAsStreamAsync返回一个readonly MemoryStream

await req.Content.LoadIntoBufferAsync();
var stream = (MemoryStream) await req.Content.ReadAsStreamAsync();

推荐阅读