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