日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
記項(xiàng)目升級(jí)到.NET5.0后webapi請(qǐng)求攔截器的完善

最近項(xiàng)目從.net core 2.1直接升級(jí)到.net 5.0,發(fā)現(xiàn)很多代碼需要改動(dòng),其中就涉及到原來的web api請(qǐng)求攔截器的中Body數(shù)據(jù)的讀取。

原來的是這樣寫的:

 
 
 
 
  1. if (filterContext.HttpContext.Request.Body.CanSeek)
  2. {
  3.   filterContext.HttpContext.Request.EnableBuffering();
  4.   StreamReader fStreamReader = new StreamReader(filterContext.HttpContext.Request.Body);
  5.   fStreamReader.BaseStream.Position = 0;
  6.   var fBodyData = fStreamReader.ReadToEnd();
  7.   fStreamReader.BaseStream.Position = 0;
  8. }

fBodyData一直為空,斷點(diǎn)body發(fā)現(xiàn)stream長(zhǎng)度為0,自然是無法讀取到任何數(shù)據(jù)。在請(qǐng)求到達(dá)攔截器時(shí)Body已經(jīng)被讀取過了,此時(shí)在攔截器中使用EnableBuffering并沒有起作用。也是奇怪,.net core 2.1還好好的,怎么突然就不行了。查了些資料,可以通過在Startup中添加如下代碼解決:

 
 
 
 
  1. public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
  2. {
  3.   //省略其他代碼
  4.   app.Use(next => context =>
  5.           {
  6.     context.Request.EnableBuffering();//啟動(dòng)倒帶方式
  7.     return next(context);
  8.   });
  9.   //省略其他代碼
  10. }

而攔截器里則可以去掉EnableBuffering的調(diào)用了

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

測(cè)試了下,日志中終于又可以讀取到body數(shù)據(jù)了。


分享名稱:記項(xiàng)目升級(jí)到.NET5.0后webapi請(qǐng)求攔截器的完善
當(dāng)前鏈接:http://www.5511xx.com/article/cdhjgjc.html