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。
有任何想法吗?谢谢!
您无法重新启动响应正文。您可以使用类似于此中间件的技术启用响应缓冲https://github.com/aspnet/BasicMiddleware/tree/master/src/Microsoft.AspNetCore.Buffering。
| 归档时间: |
|
| 查看次数: |
870 次 |
| 最近记录: |