Есть ли способ обеспечить загрузку тела HTTP-запроса в память для нескольких возможных запросов на чтение? - PullRequest
0 голосов
/ 14 января 2020

Есть ли способ обеспечить загрузку тела HTTP-запроса в память? Существует несколько промежуточных продуктов, которые будут использовать одно и то же тело HTTP-запроса для входа на нескольких уровнях.

Я помню, как делал следующее. Net Framework 4.6

await request.Content.LoadIntoBufferAsync();


/// *** Method snapshot from HttpContent - System.Net.Http library ***
/// <summary>Serialize the HTTP content to a memory buffer as an asynchronous operation.</summary>
/// <returns>The task object representing the asynchronous operation.</returns>
public Task LoadIntoBufferAsync()
{
  return this.LoadIntoBufferAsync((long) int.MaxValue);
}

Может ли кто-нибудь помочь мне найти подобное поведение в. Net Core?

EDIT

- Я думаю, что правильным ответом здесь является использование EnableBuffering, но я не могу выяснить, какой перегруженный метод следует использовать для EnableBuffering?

    public static void EnableBuffering(this HttpRequest request)
    {
        BufferingHelper.EnableRewind(request);
    }

    public static void EnableBuffering(this HttpRequest request, int bufferThreshold)
    {
        BufferingHelper.EnableRewind(request, bufferThreshold);
    }

    public static void EnableBuffering(this HttpRequest request, long bufferLimit)
    {
        BufferingHelper.EnableRewind(request, bufferLimit: bufferLimit);
    }

Размер HTTP-запроса в нашем приложении равен варьирующийся от 50кб до 300мб.

1 Ответ

2 голосов
/ 14 января 2020

Для asp. net core 2.x вы можете использовать:

HttpContext.Request.EnableRewind();

Для asp. net core 3.x вы можете использовать:

HttpContext.Request.EnableBuffering();

Эти методы гарантируют, что тело запроса может быть прочитано несколько раз. Обычно буферизует тела запросов в памяти:

https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.http.httprequestrewindextensions.enablebuffering?view=aspnetcore-3.1

...