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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章