Как перезагрузить Asp.Net Core Response.Body после записи некоторых данных - PullRequest
0 голосов
/ 10 сентября 2018

Мне нужно сбросить Response.Body после записи некоторых данных в Middleware по некоторым причинам.

Что я пробовал в методе 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, даже если в Response.Body from Controller было записано несколько байтов.

Я думал, что в теле ответа есть внутренний буфер, поэтому context.Response.HasStarted должен иметь значение FALSE, если внутренний буфер не был заполнен.

Есть идеи? Спасибо!

1 Ответ

0 голосов
/ 11 сентября 2018

Вы не можете перезапустить тело ответа.Вы можете включить буферизацию ответов, используя метод, подобный этому промежуточному программному обеспечению https://github.com/aspnet/BasicMiddleware/tree/master/src/Microsoft.AspNetCore.Buffering.

...