1
hutongqing
2024-12-13 4261951c50fadb3cdac395086974a715487bab82
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/ApiLogMiddleware.cs
@@ -22,7 +22,7 @@
        /// </summary>
        private readonly RequestDelegate _next;
        public ApiLogMiddleware(RequestDelegate next)
        public ApiLogMiddleware(RequestDelegate next, ILogger<ApiLogMiddleware> logger)
        {
            _next = next;
        }
@@ -35,13 +35,15 @@
            {
                context.Request.EnableBuffering();
                Stream originalBody = context.Response.Body;
                string requestParam = string.Empty;
                string responseParam = string.Empty;
                try
                {
                    (context.RequestServices.GetService(typeof(RequestLogModel)) as RequestLogModel).RequestDate = DateTime.Now;
                    try
                    {
                        // 瀛樺偍璇锋眰鏁版嵁
                        await RequestDataLog(context);
                        requestParam = RequestDataLog(context);
                        context.Request.Body.Position = 0;
                    }
                    catch { }
@@ -53,13 +55,14 @@
                    try
                    {
                        // 瀛樺偍鍝嶅簲鏁版嵁
                        ResponseDataLog(context.Response, ms);
                        responseParam = ResponseDataLog(context.Response);
                    }
                    catch { }
                    ms.Position = 0;
                    await ms.CopyToAsync(originalBody);
                    if (!((context.Request.Path.Value?.Contains("get")) ?? true) && !((context.Request.Path.Value?.Contains("Get")) ?? true) && !((context.Request.Path.Value?.Contains("query")) ?? true) && !((context.Request.Path.Value?.Contains("Query")) ?? true))
                        Logger.Add(requestParam, responseParam);
                }
                catch (Exception ex)
                {
@@ -77,61 +80,31 @@
            }
        }
        private async Task RequestDataLog(HttpContext context)
        private string RequestDataLog(HttpContext context)
        {
            var request = context.Request;
            var sr = new StreamReader(request.Body);
            //long length = request.Body.Length;
            RequestLogInfo requestResponse = new RequestLogInfo()
            object obj = new
            {
                Path = request.Path,
                QueryString = request.QueryString.ToString(),
                BodyData = await sr.ReadToEndAsync()
                BodyData = sr.ReadToEndAsync().Result
            };
            var content = JsonConvert.SerializeObject(requestResponse);
            if (!string.IsNullOrEmpty(content))
            {
                LogLock.OutLogAOP("鎺ュ彛鏃ュ織", new string[] { "璇锋眰鏁版嵁 -  璇锋眰鏁版嵁绫诲瀷:" + requestResponse.GetType().ToString(), content });
            string data = JsonConvert.SerializeObject(obj);
                request.Body.Position = 0;
            }
            return data;
        }
        private void ResponseDataLog(HttpResponse response, MemoryStream ms)
        private string ResponseDataLog(HttpResponse response)
        {
            ms.Position = 0;
            var responseBody = new StreamReader(ms).ReadToEnd();
            // 鍘婚櫎 Html
            var reg = "<[^>]+>";
            var isHtml = Regex.IsMatch(responseBody, reg);
            if (!string.IsNullOrEmpty(responseBody))
            {
                Parallel.For(0, 1, e =>
                {
                    LogLock.OutLogAOP("鎺ュ彛鏃ュ織", new string[] { "鍝嶅簲鏁版嵁 -  鍝嶅簲鏁版嵁绫诲瀷:" + responseBody.GetType().ToString(), responseBody });
                });
            response.Body.Position = 0;
            using StreamReader stream = new StreamReader(response.Body, leaveOpen: true);
            string body = stream.ReadToEnd();
            response.Body.Position = 0;
            return body;
            }
        }
    }
    public class RequestLogInfo
    {
        /// <summary>
        /// 璇锋眰鍦板潃
        /// </summary>
        public string Path { get; set; }
        /// <summary>
        /// 璇锋眰鍙傛暟
        /// </summary>
        public string QueryString { get; set; }
        /// <summary>
        /// Body鍙傛暟
        /// </summary>
        public string BodyData { get; set; }
    }
}