我试图在POST请求中使用System.Net.Http。我同意在内存中,但需要获得MemoryStream。其中一种方法是调用HttpContent.GetAsByteArrayAsync()并在其上包装一个MemoryStream,但我认为这需要将内容复制到单独的字节数组中(因为它返回byte[]的任务)。
如果响应体已经在HttpContent中的某个内部缓冲区中,那么是否可以在该缓冲区的基础上创建MemoryStream,或者以某种方式从HttpContent返回MemoryStream,并避免复制到单独的字节数组?
还有HttpContent.GetAsStreamAsync(),但返回的是正则流,而不是MemoryStream。尽管它可能已经是MemoryStream的一个实例,但我认为将返回的流转换为MemoryStream并不安全,或者是一个很好的实践?(因为这是可能发生变化的实现细节)。
有没有其他方法可以做到这一点,或者我别无选择,只能首先复制到byte[]中?
谢谢。
发布于 2020-03-19 04:36:02
如果您首先调用LoadIntoBufferAsync,ReadAsStreamAsync将返回一个只读 MemoryStream
await req.Content.LoadIntoBufferAsync();
var stream = (MemoryStream) await req.Content.ReadAsStreamAsync();发布于 2021-11-29 18:27:17
如果首先调用LoadIntoBufferAsync,则可以使用CopyToAsync填充只读 MemoryStream
var stream = new MemoryStream(req.Content.Headers.ContentLength);
await req.Content.LoadIntoBufferAsync((int)req.Content.Headers.ContentLength);
await req.Content.CopyToAsync(stream);此实现不依赖于副作用,所有框架版本的文档都支持这种实现:https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpcontent.loadintobufferasync?view=netframework-4.6.2
注:我试着编辑上面的答案,但做不到.所以你来了。
https://stackoverflow.com/questions/60750084
复制相似问题