由于某些原因,我需要在中间件中写入一些数据后,需要重置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()
}
问题在于上下文。Response.HasStarted始终为TRUE,即使从Controller动作中向Response.Body写入了几个字节。
我认为Response Body具有内部缓冲区,因此context.Response.HasStarted必须为FALSE,除非内部缓冲区已满。
有什么想法吗?谢谢!
答案 0 :(得分:2)
您无法重新启动响应正文。您可以使用类似中间件https://github.com/aspnet/BasicMiddleware/tree/master/src/Microsoft.AspNetCore.Buffering的技术来启用响应缓冲。