From d9c99e0480b4910cdb134778dd5c314b35ec4cf2 Mon Sep 17 00:00:00 2001
From: dengjunjie <dengjunjie@hnkhzn.com>
Date: 星期一, 29 九月 2025 10:05:23 +0800
Subject: [PATCH] 1

---
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/ApiLogMiddleware.cs |   97 ++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 85 insertions(+), 12 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/ApiLogMiddleware.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/ApiLogMiddleware.cs"
index fdc62ac..01f7441 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/ApiLogMiddleware.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/ApiLogMiddleware.cs"
@@ -23,33 +23,52 @@
         /// 
         /// </summary>
         private readonly RequestDelegate _next;
+        private readonly ILogger<ApiLogMiddleware> _logger;
 
         public ApiLogMiddleware(RequestDelegate next, ILogger<ApiLogMiddleware> logger)
         {
             _next = next;
+            _logger = logger;
         }
 
         //todo
         public async Task InvokeAsync(HttpContext context)
         {
-            if (App.ExpDateTime != null && (DateTime.Now - App.ExpDateTime.GetValueOrDefault()).TotalSeconds > 0)
-            {
-                context.Response.StatusCode = HttpStatusCode.InternalServerError.ObjToInt();
-                context.Response.ContentType = "application/json";
+            //if (App.ExpDateTime != null)
+            //{
+            //    if ((DateTime.Now - App.ExpDateTime.GetValueOrDefault()).TotalSeconds > 0)
+            //    {
+            //        await ReturnExpiredResponse(context, "绯荤粺宸茶繃鏈燂紝璇疯仈绯荤鐞嗗憳");
+            //        return;
+            //    }
+            //    //var Hours = (App.ExpDateTime.GetValueOrDefault() - DateTime.Now).TotalHours;
+            //    //if (Hours < 72)
+            //    //{
+            //    //    // 璁板綍璀﹀憡鏃ュ織
+            //    //    _logger.LogWarning($"绯荤粺鍗冲皢鍒版湡锛屽墿浣欐椂闂达細{Hours:F2}灏忔椂锛屽埌鏈熸椂闂达細{App.ExpDateTime.GetValueOrDefault():yyyy-MM-dd HH:mm:ss}");
 
-                var json = new WebResponseContent();
+            //    //    // 鍦ㄥ搷搴斿ご涓坊鍔犲埌鏈熸彁绀�
+            //    //    context.Response.Headers.Add("X-Expiration-Warning",
+            //    //        $"绯荤粺灏嗗湪 {Hours:F2} 灏忔椂鍚庡埌鏈� ({App.ExpDateTime.GetValueOrDefault():yyyy-MM-dd HH:mm:ss})");
 
-                json.Message = HttpStatusCode.InternalServerError.ToString();//閿欒淇℃伅
-                json.Code = 500;//500寮傚父 
+            //    //    // 濡傛灉闇�瑕佺洿鎺ヨ繑鍥炴彁绀轰俊鎭紝鍙栨秷涓嬮潰鐨勬敞閲�
+            //    //    await ReturnExpirationWarningResponse(context, Hours);
+            //    //    return;
+            //    //}
 
-                StreamWriter streamWriter = new StreamWriter(context.Response.Body);
-                await streamWriter.WriteAsync(json.Serialize());
-                return;
-            }
+            //}
 
             // 杩囨护锛屽彧鏈夋帴鍙�
             if (context.Request.Path.Value?.Contains("api") ?? false)
             {
+                if (App.ExpDateTime != null)
+                {
+                    if ((DateTime.Now - App.ExpDateTime.GetValueOrDefault()).TotalSeconds > 0 && !context.Request.Path.Value.Contains("getVierificationCode") && context.Request.Path.Value != "/api/User/login")
+                    {
+                        await ReturnExpiredResponse(context, "绯荤粺宸茶繃鏈燂紝璇疯仈绯荤鐞嗗憳");
+                        return;
+                    }
+                }
                 context.Request.EnableBuffering();
                 Stream originalBody = context.Response.Body;
                 string requestParam = string.Empty;
@@ -78,7 +97,7 @@
 
                     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) && !((context.Request.Path.Value?.Contains("DownLoadApp")) ?? true) && !((context.Request.Path.Value?.Contains("downLoadApp")) ?? true) && !((context.Request.Path.Value?.Contains("UploadApp")) ?? true) && !((context.Request.Path.Value?.Contains("uploadApp")) ?? true))
+                    if (!ShouldSkipLogging(context.Request.Path.Value))
                         Logger.Add(requestParam, responseParam);
                 }
                 catch (Exception ex)
@@ -97,6 +116,60 @@
             }
         }
 
+        /// <summary>
+        /// 杩斿洖杩囨湡鍝嶅簲
+        /// </summary>
+        private async Task ReturnExpiredResponse(HttpContext context, string message)
+        {
+            context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
+            context.Response.ContentType = "application/json; charset=utf-8";
+            context.Response.Headers.ContentType= "application/json; charset=utf-8";
+            var json = new WebResponseContent
+            {
+                Message = message,
+                Code = 500
+            };
+
+            var jsonString = JsonConvert.SerializeObject(json);
+            await context.Response.WriteAsync(jsonString);
+        }
+        /// <summary>
+        /// 杩斿洖鍒版湡璀﹀憡鍝嶅簲锛堝彲閫夛級
+        /// </summary>
+        private async Task ReturnExpirationWarningResponse(HttpContext context, double hoursRemaining)
+        {
+            context.Response.StatusCode = (int)HttpStatusCode.OK;
+            context.Response.ContentType = "application/json";
+
+            var expirationDate = App.ExpDateTime.GetValueOrDefault();
+            var response = new
+            {
+                Code = 200,
+                Message = "绯荤粺鍗冲皢鍒版湡璀﹀憡",
+                Data = new
+                {
+                    HoursRemaining = hoursRemaining,
+                    ExpirationDate = expirationDate,
+                    FormattedMessage = $"绯荤粺灏嗗湪 {Math.Ceiling(hoursRemaining)} 灏忔椂鍚庡埌鏈燂紝鍒版湡鏃堕棿锛歿expirationDate:yyyy-MM-dd HH:mm:ss}銆傝鑱旂郴绠$悊鍛樼画鏈熴��"
+                },
+                Warning = true
+            };
+
+            var jsonString = JsonConvert.SerializeObject(response);
+            await context.Response.WriteAsync(jsonString);
+        }
+
+        /// <summary>
+        /// 鍒ゆ柇鏄惁璺宠繃鏃ュ織璁板綍
+        /// </summary>
+        private bool ShouldSkipLogging(string path)
+        {
+            if (string.IsNullOrEmpty(path)) return false;
+
+            var skipKeywords = new[] { "get", "Get", "query", "Query", "DownLoadApp", "downLoadApp", "UploadApp", "uploadApp" };
+            return skipKeywords.Any(keyword => path.Contains(keyword, StringComparison.OrdinalIgnoreCase));
+        }
+
         private string RequestDataLog(HttpContext context)
         {
             var request = context.Request;

--
Gitblit v1.9.3