c# - .Net Core 3.0 中的请求正文为空

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

好的,所以我一直在绞尽脑汁,终其一生都无法理解为什么完全相同的一段代码在 .Net Core 2.2 中完美运行,但在 .Net Core 3.0 中返回一个空字符串。

我正在运行的一段代码是这样的:

public static async Task<string> GetRequestBodyAsync(this HttpRequest request,
                                                     Encoding encoding = null)
{
    if (encoding == null) encoding = Encoding.UTF8;
    var body = "";

    request.EnableBuffering();
    if (request.ContentLength == null || !(request.ContentLength > 0) || !request.Body.CanSeek) return body;

    request.Body.Seek(0, SeekOrigin.Begin);
    using (var reader = new StreamReader(request.Body, encoding, true, 1024, true))
        body = await reader.ReadToEndAsync();

    request.Body.Position = 0;
    return body;
}

我这样称呼这个扩展:
var bodyContent = await Request.GetRequestBodyAsync();
var body = new MemoryStream(Encoding.UTF8.GetBytes(bodyContent));

在 .Net Core 2.2 中,我完全按照我的需要获取了发送的有效负载的正文,但在 .Net Core 3.0 中,我得到了一个空字符串。

我在我的启动中使用该扩展程序将 Newtonsoft 添加到我的 .Net Core 3.0 项目中,但如果我删除它,它仍然不起作用。

任何想法我可能做错了什么?

最佳答案

在启动类中添加这个中间件:

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

关于c# - .Net Core 3.0 中的请求正文为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59185410/

相关文章:

azure - 最小 API .net core 中的 Application Insight 日志记录

c# - JsonDocument 获取 JSON 字符串

c# - 使用 DataGridView 时更改上下文的正确方法是什么?

c# - WPF中的样式仅当针对文本 block 时,也会自动将相同样式应用于按钮内容

c# - 是否可以伪造 Windows 控制台 API?

c# - 禁用 ToolStripMenuItem 与禁用 MenuStrip.Item

c# - Entity Framework 核心 - DefaultValue(true) 属性不起作用

.net - 使用 .Net core 3.1 应用程序启动后立即出现错误 "UriFormatException: Invalid URI: The format of the URI could not be determined"

c# - 将 ISchemaFilter 示例转换为 Swashbuckle 5.0

c# - JsonConverter 等效于使用 System.Text.Json