最近项目从.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数据了。
当前标题:记项目升级到.NET5.0后webapi请求拦截器的完善
新闻来源:http://www.csdahua.cn/qtweb/news46/461696.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网