记项目升级到.NET 5.0后web api请求拦截器的完善

开发 前端
最近项目从.net core 2.1直接升级到.net 5.0,发现很多代码需要改动,其中就涉及到原来的web api请求拦截器的中Body数据的读取。

最近项目从.net core 2.1直接升级到.net 5.0,发现很多代码需要改动,其中就涉及到原来的web api请求拦截器的中Body数据的读取。

[[383600]]

原来的是这样写的:

 

if (filterContext.HttpContext.Request.Body.CanSeek) 

  filterContext.HttpContext.Request.EnableBuffering(); 
  StreamReader fStreamReader = new StreamReader(filterContext.HttpContext.Request.Body); 
  fStreamReader.BaseStream.Position = 0; 
  var fBodyData = fStreamReader.ReadToEnd(); 
  fStreamReader.BaseStream.Position = 0; 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

fBodyData一直为空,断点body发现stream长度为0,自然是无法读取到任何数据。在请求到达拦截器时Body已经被读取过了,此时在拦截器中使用EnableBuffering并没有起作用。也是奇怪,.net core 2.1还好好的,怎么突然就不行了。查了些资料,可以通过在Startup中添加如下代码解决:

 

public void Configure(IApplicationBuilder app, IWebHostEnvironment env) 

  //省略其他代码 
  app.Use(next => context => 
          { 
    context.Request.EnableBuffering();//启动倒带方式 
    return next(context); 
  }); 
  //省略其他代码 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

而拦截器里则可以去掉EnableBuffering的调用了

 

if (filterContext.HttpContext.Request.Body.CanSeek) 
 { 
   filterContext.HttpContext.Request.Body.Seek(0, SeekOrigin.Begin); 
   var reader = new StreamReader(filterContext.HttpContext.Request.Body); 
   var fBodyData = reader.ReadToEndAsync().Result; 
   filterContext.HttpContext.Request.Body.Seek(0, SeekOrigin.Begin); 
 } 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

测试了下,日志中终于又可以读取到body数据了。

 

责任编辑:未丽燕 来源: 今日头条
相关推荐

2024-05-13 09:32:06

拦截器HTTP中间件

2025-01-03 08:29:53

2011-03-22 16:23:31

Firefox 4.0升级

2014-12-17 09:57:39

2023-12-08 08:38:15

升级工具.NET Core.NET 8

2021-11-01 09:00:00

Windows 11Windows 10微软

2009-06-24 16:00:00

2009-09-14 19:30:53

.NET 3.5+VS

2024-12-04 08:50:03

2011-02-18 09:06:15

ChromeChrome DevLinux

2020-01-13 10:00:32

升级Windows 10Windows

2010-11-15 08:44:38

ASP.NET MVC

2009-09-27 17:37:32

Hibernate拦截

2025-02-28 08:14:53

2011-09-27 09:13:16

Ubuntu 11.0

2020-03-25 17:55:30

SpringBoot拦截器Java

2023-09-05 08:58:07

2022-09-12 21:10:42

LinkerdKubernetes

2011-05-16 10:14:11

Hibernate

2009-08-02 08:54:46

Windows 7 R系统升级
点赞
收藏

51CTO技术栈公众号