.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; } }