搜索

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

发表于 2025-11-05 03:46:31 来源:全栈开发

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

原来的拦截是这样写的服务器租用

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; } 

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);   });   //省略其他代码 } 

而拦截器里则可以去掉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);  } 

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

拦截

拦截
随机为您推荐
版权声明:本站资源均来自互联网,如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

Copyright © 2016 Powered by 记项目升级到.NET 5.0后web api请求拦截器的完善,全栈开发  滇ICP备2023006006号-32sitemap

回顶部