如何在写入一些数据后重置 Asp.Net Core Response.Body

Loc*_*Loc 2 asp.net-core-mvc .net-core asp.net-core

由于某些原因,我需要在中间件中写入一些数据后重置 Response.Body。

我在中间件调用方法中尝试过的:

if (!context.Response.HasStarted)
{
    // Not committed / data was not sent to client yet

    // Reset Response
    context.Response.StatusCode = StatusCodes.Status200OK;
    context.Response.HttpContext.Features.Get<IHttpResponseFeature>().ReasonPhrase = null;

    if (context.Response.Body.CanSeek)
    {
        context.Response.Body.SetLength(0);
    }

    // Reset headers
    responseWrapper.ResetAddedHeaders()
}
Run Code Online (Sandbox Code Playgroud)

问题是 context.Response.HasStarted 始终为 TRUE,即使有几个字节从 Controller 操作写入 Response.Body。

我认为 Response Body 有一个内部缓冲区,所以除非内部缓冲区已满,否则 context.Response.HasStarted 必须为 FALSE。

有任何想法吗?谢谢!

dav*_*owl 5

您无法重新启动响应正文。您可以使用类似于此中间件的技术启用响应缓冲https://github.com/aspnet/BasicMiddleware/tree/master/src/Microsoft.AspNetCore.Buffering