From c020f31a67fc5aa5644511bddff075f7ecc85234 Mon Sep 17 00:00:00 2001
From: qinchulong <qinchulong@hnkhzn.com>
Date: 星期二, 27 五月 2025 15:35:27 +0800
Subject: [PATCH] Merge branch 'master' of http://115.159.85.185:8098/r/HuaYiZhongHeng/ZhongHeLiTiKu

---
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/ApiLogMiddleware.cs |  137 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 137 insertions(+), 0 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/ApiLogMiddleware.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/ApiLogMiddleware.cs"
new file mode 100644
index 0000000..ee5bdd9
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/ApiLogMiddleware.cs"
@@ -0,0 +1,137 @@
+锘縰sing Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.Logging;
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Threading.Tasks;
+using WIDESEA_Core.Helper;
+using WIDESEA_Core.LogHelper;
+
+namespace WIDESEA_Core.Middlewares
+{
+    /// <summary>
+    /// 璁板綍璇锋眰鍜屽搷搴旀暟鎹�
+    /// </summary>
+    public class ApiLogMiddleware
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        private readonly RequestDelegate _next;
+
+        public ApiLogMiddleware(RequestDelegate next)
+        {
+            _next = next;
+        }
+
+        //todo
+        public async Task InvokeAsync(HttpContext context)
+        {
+            // 杩囨护锛屽彧鏈夋帴鍙�
+            if (context.Request.Path.Value?.Contains("api") ?? false)
+            {
+                context.Request.EnableBuffering();
+                Stream originalBody = context.Response.Body;
+
+                try
+                {
+                    try
+                    {
+                        // 瀛樺偍璇锋眰鏁版嵁
+                        await RequestDataLog(context);
+                        context.Request.Body.Position = 0;
+                    }
+                    catch { }
+                    using MemoryStream ms = new();
+                    context.Response.Body = ms;
+
+                    await _next(context);
+
+                    try
+                    {
+                        // 瀛樺偍鍝嶅簲鏁版嵁
+                        ResponseDataLog(context.Response, ms);
+                    }
+                    catch { }
+
+                    ms.Position = 0;
+                    await ms.CopyToAsync(originalBody);
+
+                }
+                catch (Exception ex)
+                {
+                    // 璁板綍寮傚父
+                    
+                }
+                finally
+                {
+                    context.Response.Body = originalBody;
+                }
+            }
+            else
+            {
+                await _next(context);
+            }
+        }
+
+
+        private async Task RequestDataLog(HttpContext context)
+        {
+            var request = context.Request;
+            var sr = new StreamReader(request.Body);
+            //long length = request.Body.Length;
+            RequestLogInfo requestResponse = new RequestLogInfo()
+            {
+                Path = request.Path,
+                QueryString = request.QueryString.ToString(),
+                BodyData = await sr.ReadToEndAsync()
+            };
+            var content = JsonConvert.SerializeObject(requestResponse);
+            if (!string.IsNullOrEmpty(content))
+            {
+                LogLock.OutLogAOP("鎺ュ彛鏃ュ織", new string[] { "璇锋眰鏁版嵁 -  璇锋眰鏁版嵁绫诲瀷:" + requestResponse.GetType().ToString(), content });
+                request.Body.Position = 0;
+            }
+        }
+
+        private void ResponseDataLog(HttpResponse response, MemoryStream ms)
+        {
+            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 });
+
+                });
+            }
+        }
+    }
+
+    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; }
+    }
+}

--
Gitblit v1.9.3