Czy istnieje sposób, aby upewnić się, że korpus żądania HTTP można załadować do pamięci? Istnieje wiele wyrobów morskich, które będą korzystać z tego samego treści żądania HTTP, aby zalogować się na wielu poziomach.

Pamiętam, że wykonuję śledzenie w .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);
}

Czy ktoś może pomógł mi znaleźć podobne zachowanie w Rdzeniu .NET?

EDYTOWAĆ

- Myślę, że właściwa odpowiedź tutaj jest użycie ApelaBuffery, ale nie mogę dowiedzieć się, która przeładowana metoda powinna użyć do EnableBufring?

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

Rozmiar żądania HTTP w naszej aplikacji różni się od 50 KB do 300 MB.

0
Nainesh Patel 14 styczeń 2020, 00:34

1 odpowiedź

Najlepsza odpowiedź

Dla ASP.NET Core 2.x można użyć:

HttpContext.Request.EnableRewind();

Dla ASP.NET Core 3.x można użyć:

HttpContext.Request.EnableBuffering();

Te metody zapewniają, że organ żądania można odczytać wiele razy. Zwykle bufory żądają organów w pamięci:

https://docs.Microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.http.httpequestRindExtensions.enaNableBufringy?view=aspnetcore-3.1.

2
Nan Yu 14 styczeń 2020, 01:57