You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何未传入初始数据的MemoryStream在.NET Core请求管道中会存在响应数据

代码运行原理解释
  • .NET Core 请求管道默认的 HttpContext.Response.Body 是底层封装的只写网络流:所有后续中间件、接口业务逻辑生成的响应内容,默认都会直接写入这个网络流返回给客户端,该流不支持读取操作,内容写完后就直接发走不会留存。
  • 你执行 context.Response.Body = swapStream; 这行代码的本质是替换了响应输出的目标流:原本要写入默认网络流的所有响应内容,后续都会写入你自己实例化的这个空 MemoryStream 中。
  • 当执行到 await next.Invoke(); 时,管道中排在当前中间件之后的所有逻辑(包括其他中间件、路由匹配后的接口处理逻辑)都会全部执行完成,所有响应内容此时已经完整写入到 swapStream 中,所以你初始化时是空的流,到读取的时候已经有了完整的响应数据。
  • 如果你删除替换流的那行代码,你自己创建的 swapStream 没有被任何逻辑写入数据,自然读不到任何内容。

内容的提问来源于stack exchange,提问作者Masoud Keshavarz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 10:27:03