.net core6 的webapi过滤器中获取post参数方法


今天项目升级到net core6踩了一个坑,记一下笔记。

在.net core6 的webapi的过滤器获取post参数,不能再通过传统Request.Form方法提交,因为前端只能采用application/json方式请求数据,Request.Form是null。

方法1:采用Request.EnableBuffering()倒带读取。

在progrome中开启倒带读取。

            //启用倒带, 在过滤器中可以获取post参数
            app.Use((context, next) =>
            {
                context.Request.EnableBuffering();
                return next(context);
            });

 在过滤中通过下面但是读取参数

            //filterContext.HttpContext.Request.EnableBuffering();//net5.0之前可以直接启用倒带, 读取request.body里的的参数,net6后必须在中间件中配置。
            filterContext.HttpContext.Request.Body.Position = 0;
            using var reader = new StreamReader(filterContext.HttpContext.Request.Body, Encoding.UTF8);
            var param = reader.ReadToEndAsync().Result; //获取一个json数据

 

方法2:通过ActionDescriptor.Parameters获取参数

演示代码如下:

         var parameters = filterContext.ActionDescriptor.Parameters;
            foreach (var parameter in parameters)
            {
                var data = filterContext.ActionArguments; //获取一个类似字典集合。
            }



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章