在 ASP.NET 核心中重新读取请求正文

Sea*_*ean 3 c# asp.net asp.net-core

我有一个错误记录器,可将错误从 API 控制器写入数据库。它有一些这样的代码:

string form = string.Empty;
if (request.Method == "POST")
{
    using (StreamReader sr = new StreamReader(request.Body))
    {
        if (request.Body.CanSeek) request.Body.Seek(0, SeekOrigin.Begin);
        if (request.Body.CanRead) form = sr.ReadToEndAsync().Result;
        form = sr.ReadToEndAsync().Result;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,这无法读取正文,因为它已被读取,并且 ASP.NET Core 不允许您执行此操作。请参阅:https : //devblogs.microsoft.com/aspnet/re-reading-asp-net-core-request-bodies-with-enablebuffering/

我看了看.EnableBuffering和.EnableRewind,但这些都不上存在的HttpRequest(至少在3.0。

app.Use(async (context, next) => {
    context.Request.EnableRewind();
    await next();
});
Run Code Online (Sandbox Code Playgroud)

如何重新阅读请求正文?

Rom*_*syk 7

EnableBuffering 存在于 dotnet 3.0 中,只需添加

using Microsoft.AspNetCore.Http;
Run Code Online (Sandbox Code Playgroud)

然后

app.Use(async (context, next) => {
    context.Request.EnableBuffering();
    await next();
});
Run Code Online (Sandbox Code Playgroud)