From b2ad000e07e1c87d3561b5aa94fdc88c779872f0 Mon Sep 17 00:00:00 2001 From: dengjunjie <dengjunjie@hnkhzn.com> Date: 星期二, 18 二月 2025 22:34:54 +0800 Subject: [PATCH] 1 --- 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/ApiLogMiddleware.cs | 144 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 144 insertions(+), 0 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" new file mode 100644 index 0000000..fdc62ac --- /dev/null +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/ApiLogMiddleware.cs" @@ -0,0 +1,144 @@ +锘縰sing Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using Org.BouncyCastle.Asn1.Ocsp; +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; + +namespace WIDESEA_Core.Middlewares +{ + /// <summary> + /// 璁板綍璇锋眰鍜屽搷搴旀暟鎹� + /// </summary> + public class ApiLogMiddleware + { + /// <summary> + /// + /// </summary> + private readonly RequestDelegate _next; + + public ApiLogMiddleware(RequestDelegate next, ILogger<ApiLogMiddleware> logger) + { + _next = next; + } + + //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"; + + 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 + { + // 瀛樺偍璇锋眰鏁版嵁 + requestParam = RequestDataLog(context); + context.Request.Body.Position = 0; + } + 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 (!((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); + } + catch (Exception ex) + { + // 璁板綍寮傚父 + + } + finally + { + context.Response.Body = originalBody; + } + } + 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 ""; + } + } +} -- Gitblit v1.9.3