您现在的位置是:亿华云 > 应用开发
记项目升级到.NET 5.0后web api请求拦截器的完善
亿华云2025-10-09 01:36:01【应用开发】6人已围观
简介最近项目从.net core 2.1直接升级到.net 5.0,发现很多代码需要改动,其中就涉及到原来的web api请求拦截器的中Body数据的读取。原来的是这样写的:if(filterContex
最近项目从.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数据了。请求器
拦截很赞哦!(99)
相关文章
- 4、选择一个安全的域名注册商进行域名注册
- 【死磕JVM】JVM快速入门之前戏篇
- 摊牌了!策略模式在项目设计中用的多吗?
- 从 Bug 中学习:六大开源项目告诉你 Go 并发编程的那些坑
- 为了避免将来给我们的个人站长带来的麻烦,在选择域名后缀时,我们的站长最好省略不稳定的后缀域名,比如n,因为我们不知道策略什么时候会改变,更不用说我们将来是否还能控制这个域名了。因此,如果站长不是企业,或者有选择的话,如果不能选择域名的cn类,最好不要选择它。
- 我用Kafka两年踩过的一些非比寻常的坑
- 设计模式系列之桥接模式
- Pythpn入门进阶系列 - 构建一个PyQt应用程序示例
- 以上的就是为大家介绍的关于域名的详解域名注册:域名注册0
- 太酷了吧,在VS Code上就可以直接读Github代码了