如何在.net核心中获取HttpRequest主体?

ray*_*era 4 c# httpcontext streamreader asp.net-core

我想在.net核心中获取Http Request主体,我使用了以下代码:

using (var reader
    = new StreamReader(req.Body, Encoding.UTF8))
{
    bodyStr = reader.ReadToEnd();
}
req.Body.Position = 0
Run Code Online (Sandbox Code Playgroud)

但是我得到了这个错误:

System.ObjectDisposedException:无法访问已处置的对象。对象名称:“ FileBufferingReadStream”。

该行的using语句后发生错误

如何在.net核心中获取HttpRequest主体?以及如何解决此错误?

ami*_*ini 5

使用此扩展方法获取httpRequest正文:

   public static string GetRawBodyString(this HttpContext httpContext, Encoding encoding)
    {
        var body = "";
        if (httpContext.Request.ContentLength == null || !(httpContext.Request.ContentLength > 0) ||
            !httpContext.Request.Body.CanSeek) return body;
        httpContext.Request.EnableRewind();
        httpContext.Request.Body.Seek(0, SeekOrigin.Begin);
        using (var reader = new StreamReader(httpContext.Request.Body, encoding, true, 1024, true))
        {
            body = reader.ReadToEnd();
        }
        httpContext.Request.Body.Position = 0;
        return body;
    }
Run Code Online (Sandbox Code Playgroud)

重要的是HttpRequest.Body是一个Stream类型,并且在配置StreamReader时,也将配置HttpRequest.Body。

在我在github中找到以下链接之前,我一直遇到这个问题:请参考以下链接和GetBody方法 https://github.com/devdigital/IdentityServer4TestServer/blob/3eaf72f9e1f7086b5cfacb5ecc8b1854ad3c496c/Source/IdentityServer4TestServer/Token/TokenCreationMiddleware.cs

如果正确,则标记为正确答案。