最近项目从.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数据了。
数据分析除了在零售电商行业中被经常应用之外,互联网运营、传统行业等也同样分...
TOP云 (west.cn)2月13日消息,据科技博客TechCrunch最新消息,位于旧金山的协...
作者:Mintimate 博客: https://www.mintimate.cn Mintimates Blog,只为与你分...
创作人:欧阳楚才 映射(mapping)就像数据库中的 Schema ,描述了文档可能具有...
OceanBase 5mins Tips 又更新啦! OceanBase 5mins Tips 是 OceanBaseDev 社群推...
报告综述 SaaS 从何而来,为何而生? 云计算概念兴起的背后是 IT 界从上世纪 60 ...
操作场景 专属主机的开通是自助完成的,您只需要指定相关参数,比如区域和可用区...
服务器的流量是什么?服务器的流量其实就是站点被访问时,所进行传输消耗的数据...
上传文件到 云服务器 用什么软件?上传文件到 云服务器 可以使用FTP方式,云服务...
前几天项目经理提了个需求要实现点击刷新按钮实现页面的局部刷新,刷新页面使用谷...