.net core6 的webapi过滤器中获取post参数方法
今天项目升级到net core6踩了一个坑,记一下笔记。
在.net core6 的webapi的过滤器获取post参数,不能再通过传统Request.Form方法提交,因为前端只能采用application/json方式请求数据,Request.Form是null。
方法1:采用Request.EnableBuffering()倒带读取。
在progrome中开启倒带读取。
1 2 3 4 5 6 | //启用倒带, 在过滤器中可以获取post参数 app.Use((context, next) => { context.Request.EnableBuffering(); return next(context); }); |
在过滤中通过下面但是读取参数
1 2 3 4 | //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; //获取一个类似字典集合。
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步