分享 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 中间件(三):如何创建自己的中间件?

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

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

相关推荐
小熊熊知识库4 小时前
C#接入AI操作步骤详解(deepseek接入)
人工智能·flask·c#
玖笙&4 小时前
✨WPF编程进阶【7.3】集成动画(附源码)
c++·c#·wpf·visual studio
无心水4 小时前
【分布式利器:RocketMQ】RocketMQ基本原理详解:架构、流程与核心特性(附实战场景)
中间件·架构·rocketmq·topic·rocketmq基本原理·电商金融mq·nameserver
yue0086 小时前
C# 窗体渐变色
开发语言·javascript·c#
czhc11400756636 小时前
C#1119记录 类 string.Split type.TryParse(String,out type 变量)
android·c#
WangMing_X8 小时前
C#一个项目实现文件目录常用操作(附源码完整)
开发语言·c#
mudtools9 小时前
.NET集成飞书API最佳实践:基于Mud.Feishu的飞书二次开发实践
c#·.net
玩泥巴的9 小时前
.NET项目中如何快速的集成飞书API
c#·.net·飞书
初九之潜龙勿用9 小时前
C# 使用豆包 AI 模型实现首尾帧模式的视频生成
人工智能·microsoft·c#·ai编程·视频·ai模型·豆包
烛阴10 小时前
C#运算符与表达式终极指南:从入门到精通的万字长文
前端·c#