您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    记项目晋级到.NET 5.0后web api央求阻拦器的完善
    时间:2021-02-25 21:01 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

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

    记项目晋级到.NET 5.0后web api央求阻拦器的完善

    原来的是这样写的:

    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数据了。

    记项目晋级到.NET 5.0后web api央求阻拦器的完善

    (责任编辑:admin)