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



我有一个错误记录器,可以将错误从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;
}
}

但是,这无法读取正文,因为它已被读取,并且 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();
});

如何重新读取请求正文?

EnableBuffering

存在于dotnet 3.0中,只需添加

using Microsoft.AspNetCore.Http;

然后

app.Use(async (context, next) => {
context.Request.EnableBuffering();
await next();
});

最新更新