今天項目升級到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; //獲取一個類似字典集合。
}