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

标签 c# asp.net asp.net-core

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

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

关于c# - 在 ASP.NET 核心中重新读取请求正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59076409/

相关文章:

c# - SQL 更新不起作用

c# - .Net Core - Entity Framework - MySQL > 未找到 UseMysql

asp.net-core - 在带有 dotnet 包任务的项目中使用 dotnet run 时未创建包

c# - 为什么经典的 asp.net web 服务比 wcf 更快?

asp.net - 用户处于角色 "admin"但 [Authorize(Roles ="admin")] 不会进行身份验证

asp.net-core - 为什么当我们创建新的 Web APi 服务时,.NET Core 中的 Web API 的身份验证类型 - 个人用户帐户不可用

c# - 从 wsdl 生成 c# 类

c# - 事件目录 findone() 方法

c# - 如何只从多行文本中提取第一行

javascript - 使用 JavaScript 和 ASP.NET 设置或添加/删除 css 属性时闪烁