From 4f39dcc195f28fa275fc2d065fbf1bf6a46c21b7 Mon Sep 17 00:00:00 2001 From: dengjunjie <dengjunjie@hnkhzn.com> Date: 星期二, 17 六月 2025 00:41:18 +0800 Subject: [PATCH] 优化出入库逻辑 --- 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/ApiLogMiddleware.cs | 209 ++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 147 insertions(+), 62 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" index ee5aea4..680b875 100644 --- "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" @@ -4,7 +4,9 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Net; using System.Text; +using System.Text.RegularExpressions; using System.Threading.Tasks; using WIDESEA_Core.Helper; using WIDESEA_Core.LogHelper; @@ -20,94 +22,177 @@ /// /// </summary> private readonly RequestDelegate _next; - private readonly ILogger<ApiLogMiddleware> _logger; - public ApiLogMiddleware(RequestDelegate next, ILogger<ApiLogMiddleware> logger) + public ApiLogMiddleware(RequestDelegate next) { _next = next; - _logger = logger; } //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 + { + (context.RequestServices.GetService(typeof(RequestLogModel)) as RequestLogModel).RequestDate = DateTime.Now; try { // 瀛樺偍璇锋眰鏁版嵁 - //string requestParam = GetRequestData(context); - //DateTime beginDate = DateTime.Now; + requestParam = RequestDataLog(context); + context.Request.Body.Position = 0; + } + catch { } + using MemoryStream ms = new(); + context.Response.Body = ms; - //using var ms = new MemoryStream(); - //context.Response.Body = ms; + await _next(context); - await _next(context); - + try + { // 瀛樺偍鍝嶅簲鏁版嵁 - //DateTime endDate = DateTime.Now; - //string responseParam = GetResponsetData(context); + responseParam = ResponseDataLog(context.Response); + } + catch { } - //context.Response.Body.Position = 0; - //await context.Response.Body.CopyToAsync(originalBody); + ms.Position = 0; + await ms.CopyToAsync(originalBody); - //Logger.WriteApiLog2DB(context,requestParam, beginDate, responseParam, endDate, context.Response.StatusCode == 200 ? LoggerStatus.Success : LoggerStatus.Error); - } - catch (Exception ex) - { - // 璁板綍寮傚父 - _logger.LogError(ex.Message + "" + ex.InnerException); - } - finally - { - //context.Response.Body = 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)) + Logger.Add(requestParam, responseParam); } - //else - //{ - // await _next(context); - //} + catch (Exception ex) + { + // 璁板綍寮傚父 + + } + finally + { + context.Response.Body = originalBody; + } } - //else - //{ - // await _next(context); - //} + else + { + await _next(context); + } + } + private string RequestDataLog(HttpContext context) + { + var request = context.Request; + + var sr = new StreamReader(request.Body); + + object obj; + string bodyData = sr.ReadToEndAsync().Result; + if (request.ContentLength <= 100000) + { + obj = new + { + QueryString = request.QueryString.ToString(), + BodyData = bodyData + }; + } + else + { + obj = new + { + QueryString = request.QueryString.ToString(), + BodyData = "" + }; + } + string data = JsonConvert.SerializeObject(obj); + + request.Body.Position = 0; + + return data; + } + private string ResponseDataLog(HttpResponse response) + { + if (response.ContentLength <= 100000) + { + response.Body.Position = 0; + using StreamReader stream = new StreamReader(response.Body, leaveOpen: true); + string body = stream.ReadToEnd(); + response.Body.Position = 0; + return body; + } + return ""; } - private string GetRequestData(HttpContext context) - { - try - { - 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}"; - } - } + //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 string GetResponsetData(HttpContext context) + private void ResponseDataLog(HttpResponse response, MemoryStream ms) { - try + ms.Position = 0; + var responseBody = new StreamReader(ms).ReadToEnd(); + + // 鍘婚櫎 Html + var reg = "<[^>]+>"; + var isHtml = Regex.IsMatch(responseBody, reg); + + if (!string.IsNullOrEmpty(responseBody)) { - 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}"; + 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