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

问题描述 投票:0回答:1

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

我在Middleware Invoke方法中尝试过的方法:

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()
}

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

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

有任何想法吗?谢谢!

asp.net-core .net-core asp.net-core-mvc
1个回答
2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.