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

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

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

相关推荐
Wythzhfrey2 小时前
单片机Day05---静态数码管
c语言·单片机·嵌入式硬件·学习·c#·51单片机
夜月yeyue3 小时前
STM32启动流程详解
linux·c++·stm32·单片机·嵌入式硬件·c#
码观天工3 小时前
解锁.NET 9性能优化黑科技:从内存管理到Web性能的最全指南
性能优化·c#·.net·内存管理·异步·.net 9
Tdm_8885 小时前
SQL Server中OPENJSON + WITH 来解析JSON
java·数据库·sql·c#·json·mssql
观无8 小时前
关于Newtonsoft.Json
c#
唐青枫9 小时前
C# 如何比较两个List是否相等?
c#·.net
搬砖工程师Cola14 小时前
<C#>在 C# .NET 6 中,使用IWebHostEnvironment获取Web应用程序的运行信息。
开发语言·c#·.net
Dazer00720 小时前
C# 运行web项目
c#
xiaowu0801 天前
C#设计模式-状态模式
设计模式·c#·状态模式
weisian1511 天前
中间件--ClickHouse-4--向量化执行(什么是向量?为什么向量化执行的更快?)
clickhouse·中间件