.net core获取http请求中body的数据

很多人可能会这样写:

复制代码
[HttpPost]
public IActionResult QXQK([FromBody]QXQK qxqk)
{
    Request.EnableBuffering();
    Request.Body.Position = 0;
    StreamReader reader = new StreamReader(Request.Body, Encoding.UTF8);
    var str = reader.ReadToEndAsync().Result;

    return Content("qxdm:" + qxqk.qxdm);
}
复制代码

这样写的结果就是str为空,但是qxqk.qxdm有值。于是我们把[FromBody]去掉,如下:

复制代码
[HttpPost]
public IActionResult QXQK(QXQK qxqk)
{
    Request.EnableBuffering();
    Request.Body.Position = 0;
    StreamReader reader = new StreamReader(Request.Body, Encoding.UTF8);
    var str = reader.ReadToEndAsync().Result;

    return Content("qxdm:" + qxqk.qxdm);
}
复制代码

这样写的结果是str能获取到数据,而qxqk.qxdm为空。最后咱们采用第一种写法,同时增加中间件,中间件代码如下:

复制代码
app.Use(async (context,next) =>
{
    if (context.Request.Method.Equals("POST", StringComparison.OrdinalIgnoreCase))
    {
        context.Request.EnableBuffering();

        using (var reader = new StreamReader(context.Request.Body, encoding: Encoding.UTF8
            , detectEncodingFromByteOrderMarks: false, leaveOpen: true))
        {
            var body = await reader.ReadToEndAsync();
            context.Items.Add("body", body);

            context.Request.Body.Position = 0;
        }
    }
    await next.Invoke();
});
复制代码

OK,能正确获取到数据了。

posted @   段江涛IT  阅读(5010)  评论(3编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
页脚HTML代码
点击右上角即可分享
微信分享提示