.net 6 在异常过滤器中记录post参数 EnableBuffering
在请求到达过滤器时Steam已经被读取了,此时我们在过滤器中使用EnableBuffering并没有起作用, 还需要在中间件里使用EnableBuffering
在.net 6有一些稍微的不同
1. 在program.cs里通过中间件启用倒带
//启用倒带, 在发生异常时, 可以通过过滤器获取post参数 app.Use((context, next) => { context.Request.EnableBuffering(); return next(context); });
2. 在异常过滤器里使用
/// <summary> /// OnException /// </summary> /// <param name="context"></param> public void OnException(ExceptionContext context) { //请求参数 var param = ""; if (context.HttpContext.Request.Method == "GET") { param = context.HttpContext.Request.QueryString.Value; } else if (context.HttpContext.Request.Method == "POST") { context.HttpContext.Request.EnableBuffering();//启用倒带, 读取request.body里的的参数, 还必须在在Program.cs里也启用倒带功能 context.HttpContext.Request.Body.Position = 0; using var reader = new StreamReader(context.HttpContext.Request.Body, Encoding.UTF8); param = reader.ReadToEndAsync().Result; } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步