From 1ceaab54e82568a57599b61036aeccd110184e48 Mon Sep 17 00:00:00 2001
From: huangxiaoqiang <huangxiaoqiang@hnkhzn.com>
Date: 星期一, 06 四月 2026 09:51:53 +0800
Subject: [PATCH] 接口有效期控制与API日志异步批量写入优化
---
项目代码/WMS/WMSServer/WIDESEA_Core/Middlewares/ApiLogMiddleware.cs | 146 +++++++++++++++++++++++++++---------------------
1 files changed, 83 insertions(+), 63 deletions(-)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Core/Middlewares/ApiLogMiddleware.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Core/Middlewares/ApiLogMiddleware.cs"
index cae01e1..ec65239 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Core/Middlewares/ApiLogMiddleware.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Core/Middlewares/ApiLogMiddleware.cs"
@@ -4,10 +4,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Net;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.Helper;
using WIDESEA_Core.LogHelper;
+using WIDESEAWCS_Core.LogHelper;
namespace WIDESEA_Core.Middlewares
{
@@ -31,83 +33,101 @@
//todo
public async Task InvokeAsync(HttpContext context)
{
- //if (AppSettings.app("Middleware", "RequestResponseLog", "Enabled").ObjToBool())
+ if (App.ExpDateTime != null && (DateTime.Now - App.ExpDateTime.GetValueOrDefault()).TotalSeconds > 0)
{
- // 杩囨护锛屽彧鏈夋帴鍙�
- if (context.Request.Path.Value.Contains("api"))
- {
- context.Request.EnableBuffering();
- //Stream originalBody = context.Response.Body;
+ context.Response.StatusCode = HttpStatusCode.InternalServerError.ObjToInt();
+ context.Response.ContentType = "application/json";
+ var json = new WebResponseContent();
+
+ json.Message = HttpStatusCode.InternalServerError.ToString();//閿欒淇℃伅
+ json.Code = 500;//500寮傚父
+
+ StreamWriter streamWriter = new StreamWriter(context.Response.Body);
+ await streamWriter.WriteAsync(json.Serialize());
+ return;
+ }
+
+ // 杩囨护锛屽彧鏈夋帴鍙�
+ if (context.Request.Path.Value?.Contains("api") ?? false)
+ {
+ context.Request.EnableBuffering();
+ Stream originalBody = context.Response.Body;
+ string requestParam = string.Empty;
+ string responseParam = string.Empty;
+ try
+ {
+ string? apiIgnore = AppSettings.GetValue("ApiLogIgnore")?.ToString();
+ string[] ignoreUrls = !string.IsNullOrEmpty(apiIgnore) ? apiIgnore.Split(",") : new string[] { "get" };
+
+ (context.RequestServices.GetService(typeof(RequestLogModel)) as RequestLogModel).RequestDate = DateTime.Now;
try
{
// 瀛樺偍璇锋眰鏁版嵁
- //string requestParam = GetRequestData(context);
- //DateTime beginDate = DateTime.Now;
-
- //using var ms = new MemoryStream();
- //context.Response.Body = ms;
-
- await _next(context);
-
- // 瀛樺偍鍝嶅簲鏁版嵁
- //DateTime endDate = DateTime.Now;
- //string responseParam = GetResponsetData(context);
-
- //context.Response.Body.Position = 0;
- //await context.Response.Body.CopyToAsync(originalBody);
-
- //Logger.WriteApiLog2DB(context,requestParam, beginDate, responseParam, endDate, context.Response.StatusCode == 200 ? LoggerStatus.Success : LoggerStatus.Error);
+ requestParam = RequestDataLog(context);
+ context.Request.Body.Position = 0;
}
- catch (Exception ex)
- {
- // 璁板綍寮傚父
- _logger.LogError(ex.Message + "" + ex.InnerException);
- }
- finally
- {
- //context.Response.Body = originalBody;
- }
- }
- else
- {
+ catch { }
+ using MemoryStream ms = new();
+ context.Response.Body = ms;
+
await _next(context);
+
+ try
+ {
+ // 瀛樺偍鍝嶅簲鏁版嵁
+ responseParam = ResponseDataLog(context.Response);
+ }
+ catch { }
+
+ ms.Position = 0;
+ await ms.CopyToAsync(originalBody);
+
+ if (!ignoreUrls.Any(x => context.Request.Path.Value?.ToLower().Contains(x.ToLower()) ?? false))
+ {
+ Logger.Add(requestParam, responseParam);
+ }
+ }
+ catch (Exception ex)
+ {
+ // 璁板綍寮傚父
+
+ }
+ finally
+ {
+ context.Response.Body = originalBody;
}
}
- //else
- //{
- // await _next(context);
- //}
- }
-
- private string GetRequestData(HttpContext context)
- {
- try
+ else
{
- using StreamReader sr = new StreamReader(context.Request.Body);
- string request = JsonConvert.SerializeObject(sr.ReadToEnd()); ;
- context.Request.Body.Position = 0;
- return request;
- }
- catch (Exception ex)
- {
- return $"璇锋眰鍙傛暟鑾峰彇閿欒,{ex.Message}";
+ await _next(context);
}
}
-
- private string GetResponsetData(HttpContext context)
+ private string RequestDataLog(HttpContext context)
{
- try
+ var request = context.Request;
+ var sr = new StreamReader(request.Body);
+
+ object obj = new
{
- using StreamReader sr = new StreamReader(context.Response.Body);
- string response = JsonConvert.SerializeObject(sr.ReadToEnd()); ;
- context.Response.Body.Position = 0;
- return response;
- }
- catch (Exception ex)
- {
- return $"鍝嶅簲鍙傛暟鑾峰彇閿欒,{ex.Message}";
- }
+ QueryString = request.QueryString.ToString(),
+ BodyData = sr.ReadToEndAsync().Result
+ };
+
+ string data = JsonConvert.SerializeObject(obj);
+
+ request.Body.Position = 0;
+
+ return data;
+ }
+
+ private string ResponseDataLog(HttpResponse response)
+ {
+ response.Body.Position = 0;
+ using StreamReader stream = new StreamReader(response.Body, leaveOpen: true);
+ string body = stream.ReadToEnd();
+ response.Body.Position = 0;
+ return body;
}
}
}
--
Gitblit v1.9.3