【问题标题】:Re-read a Request body in ASP.NET core在 ASP.NET 核心中重新读取请求正文
【发布时间】:2020-03-23 09:01:34
【问题描述】:

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

如何重新阅读请求正文?

【问题讨论】:

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


    【解决方案1】:

    EnableBuffering存在于dotnet 3.0中,添加即可

    using Microsoft.AspNetCore.Http;
    

    然后

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

    【讨论】:

    • 但是在配置管道的什么时候应该添加该功能?在 .UseRouting() 之前?在 .UseAuthentication() 之前?之后?
    • 谢谢罗曼。我已经把它放在urlrouting 之前。如果是错的,请告诉我确切的位置
    猜你喜欢
    • 2017-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    相关资源
    最近更新 更多