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

 

posted @ 2022-11-01 15:37  范斯  阅读(517)  评论(0编辑  收藏  举报