.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; //獲取一個類似字典集合。
            }



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