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

Mas*_*arz -1 c# memorystream asp.net-core

我有一个测试.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();
        }
    });
 }
Run Code Online (Sandbox Code Playgroud)

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

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

JOS*_*Ftw 5

其他东西正在写入流,当您调用时会发生

await next.Invoke();
Run Code Online (Sandbox Code Playgroud)

您正在用内存流替换响应流,并且链中稍后的内容会写入该流。