为什么 MemoryStream() 有数据,即使它没有用任何数据源初始化

Why MemoryStream() has data even though it is not initialized with any source of data

我有一个测试 .Net Core 应用程序,我想从管道读取 http 响应以供个人练习。

此最小代码示例提供了 http 响应。我知道它正在破坏我稍后需要修复的响应体,但这不是我的问题。我的问题是 MemoryStream() 如何在其中包含 http 响应,即使我没有使用任何数据源对其进行初始化?

"Startup.cs":

public void Configure(IApplicationBuilder app)
{
    app.Use(async (context, next) =>
    {
        using (var swapStream = new MemoryStream())
        {
            context.Response.Body = swapStream;

            await next.Invoke();

            swapStream.Seek(0, SeekOrigin.Begin);
            string responseBody = new StreamReader(swapStream).ReadToEnd();
        }
    });
 }

如您所见,MemoryStream() 根本没有使用任何数据源进行初始化。但最后在 responseBody 我可以看到我的 http 响应。让我更困惑的是,如果我删除 context.Response.Body = swapStream; 那么我在 responseBody.

中没有 http 响应

如果有人能帮助我理解这段代码是如何工作的,我将不胜感激。

其他东西正在写入流,它发生在你调用

await next.Invoke();

您正在用您的记忆流替换响应流,链中稍后的内容写入该流。