分享 ASP.NET Core Web Api 中间件获取 Request Body 两个方法

不废话,直接上正文。_

方法一

思路:利用 BodyReader 直接读取 HttpContext 的 Request Body,再反序列化

c# 复制代码
var reqStream = context.Request.BodyReader.AsStream();
var jsonObj = JsonSerializer.Deserialize<CheckAndParsingMiddlewareModel>(reqStream);

方法二

思路:传统方式,将 HttpContext 的 Request Body 转成字符串,再反序列化

c# 复制代码
Stream reqStream = context.Request.Body;
byte[] buffer = new byte[context.Request.ContentLength!.Value];
await reqStream.ReadAsync(buffer, 0, buffer.Length);
var reqStr = Encoding.UTF8.GetString(buffer);
var jsonObj = JsonSerializer.Deserialize<CheckAndParsingMiddlewareModel>(reqStr)!;

总结:

  1. 以上两种写法都可以,第一种更简洁,第二种更灵活
  2. JsonSerializer.Deserialize 不支持序列化为 dynamic 类型,需要创建一个实体类

Step By Step 实例

Step By Step 实例可参考前文 《聊聊 ASP.NET Core 中间件(三):如何创建自己的中间件?

我是老杨,一个奋斗在一线的资深研发老鸟,让我们一起聊聊技术,聊聊人生。

都看到这了,求个点赞、关注、在看三连呗,感谢支持。

相关推荐
yong99905 小时前
C# 实时查看硬件使用率(CPU 内存 硬盘 网络)
开发语言·网络·c#
神仙别闹7 小时前
基于 C# OpenPGP 的文件管理系统
开发语言·c#
java资料站8 小时前
常用中间件快速搭建
docker·中间件
海盗123410 小时前
C#在Distinct()中使用IEqualityComparer<T>
开发语言·c#
呼Lu噜12 小时前
基于C#的ASP.NET Core中分析async、await的使用场景
数据库·c#·asp.net
等故意15 小时前
C# 工业视觉上位机开发心得分享
开发语言·数码相机·c#·视觉检测
时光追逐者16 小时前
C#/.NET/.NET Core技术前沿周刊 | 第 70 期(2026年5.01-5.10)
c#·.net·.netcore
莫生灬灬16 小时前
ElementUI封装 共91个组件 支持易语言/火山/C#/Python
开发语言·c++·python·ui·elementui·c#
Java面试题总结16 小时前
.NET 8 Web开发入门(三):解构引擎——依赖注入(DI)与中间件管道
前端·中间件·.net