如何通过ASP.NET Core自定义中间件读取Request.Body并修改Response?

2026-03-31 08:180阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1507个文字,预计阅读时间需要7分钟。

如何通过ASP.NET Core自定义中间件读取Request.Body并修改Response?

背景

背景#

最近在徒手造轮子,编写一个ASP.NET Core的日志监控器,其中用到了自定义中间件读取Request.Body和Response.Body的内容,但是编写过程,并不像想象中的一帆风顺,ASP.NET Core针对Request.Body和Response.Body的几个特殊设计,导致了完成以上功能需要绕一些弯路。

原始代码#

为了读取Request.Body和Response.Body的内容,我的实现思路如下:

创建一个LoggerMiddleware的中间件,将它放置在项目中间件管道的头部。因为根据ASP.NET Core的中间件管道设计,只有第一个中间件才能获取到原始的请求信息和最终的响应信息。

Request.Body和Response.Body属性都是Steram类型, 在LoggerMiddleware中间件的InvokeAsync方法中,我们可以分别使用StreamReader读取Request.Body和Response.Body的内容。

根据以上思路,我编写了以下代码。

阅读全文

本文共计1507个文字,预计阅读时间需要7分钟。

如何通过ASP.NET Core自定义中间件读取Request.Body并修改Response?

背景

背景#

最近在徒手造轮子,编写一个ASP.NET Core的日志监控器,其中用到了自定义中间件读取Request.Body和Response.Body的内容,但是编写过程,并不像想象中的一帆风顺,ASP.NET Core针对Request.Body和Response.Body的几个特殊设计,导致了完成以上功能需要绕一些弯路。

原始代码#

为了读取Request.Body和Response.Body的内容,我的实现思路如下:

创建一个LoggerMiddleware的中间件,将它放置在项目中间件管道的头部。因为根据ASP.NET Core的中间件管道设计,只有第一个中间件才能获取到原始的请求信息和最终的响应信息。

Request.Body和Response.Body属性都是Steram类型, 在LoggerMiddleware中间件的InvokeAsync方法中,我们可以分别使用StreamReader读取Request.Body和Response.Body的内容。

根据以上思路,我编写了以下代码。

阅读全文