有没有办法确保 HTTP 请求正文可以加载到内存中以用于可能的多个读取请求?

Is there a way to ensure the HTTP request body can be loaded into memory for possible multiple read requests?

有没有办法保证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 中的类似行为?

编辑

-- 我认为这里的正确答案是使用 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 请求的大小从 50kb 到 300mb 不等。

对于asp.net核心2.x你可以使用:

HttpContext.Request.EnableRewind();

对于asp.net核心3.x你可以使用:

HttpContext.Request.EnableBuffering();

该方法确保可以多次读取请求正文。通常在内存中缓冲请求体:

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