c# - 来自 HttpContent 的 MemoryStream 无需复制
问题描述
我正在尝试将 System.Net.Http 用于 POST 请求。我可以接受 HTTP 响应正文在内存中,但需要为其获取 MemoryStream。一种方法是调用 HttpContent.GetAsByteArrayAsync() 并在其上包装 MemoryStream,但我认为这需要将内容复制到单独的字节数组中(因为它返回字节 [] 的任务)。
如果响应主体已经在 HttpContent 的某个内部缓冲区中,是否可以在该缓冲区之上创建 MemoryStream,或者以某种方式从 HttpContent 返回 MemoryStream 并避免复制到单独的字节数组?
还有 HttpContent.GetAsStreamAsync(),但它返回常规 Stream,而不是 MemoryStream。尽管它可能已经是 MemoryStream 的一个实例,但我认为将返回的流转换为 MemoryStream 是不安全的,也不是一种好的做法?(因为这是可能改变的实现细节)。
有没有其他方法可以做到这一点,还是我别无选择,只能先复制到 byte[] 中?
谢谢。
解决方案
如果您LoadIntoBufferAsync
先调用,则ReadAsStreamAsync
返回一个readonly MemoryStream
:
await req.Content.LoadIntoBufferAsync();
var stream = (MemoryStream) await req.Content.ReadAsStreamAsync();
推荐阅读
- sqlite - 选择从今天开始的时间
- vue.js - 如何为动态路由传递参数?
- javascript - 如何阻止 UrlFetchApp 变成“com”。子串到(类)
- ubuntu - DANTED SERVER v1.1.19 - ubuntu 上的错误配置 sock5
- java - 为什么要重置 Alpha 动画?
- jenkins - 如何在 Windows Docker 容器中运行 Jenkins 作业
- postgresql - Liquibase:向表中添加一列,并用唯一值填充每个现有行的新列
- excel - #VALUE 特定日期值后 VBA 中的错误
- spring-integration - 如何在没有“输入通道”的情况下在 XML 中声明可重用转换器?
- sharepoint-online - 带有 CAML 查询的 SharePoint REST API 超过 5000 个项目