|  |  | 
 |  |  | 锘縰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; | 
 |  |  | 
 |  |  |         /// </summary> | 
 |  |  |         private readonly RequestDelegate _next; | 
 |  |  |  | 
 |  |  |         public ApiLogMiddleware(RequestDelegate next) | 
 |  |  |         public ApiLogMiddleware(RequestDelegate next, ILogger<ApiLogMiddleware> logger) | 
 |  |  |         { | 
 |  |  |             _next = next; | 
 |  |  |         } | 
 |  |  | 
 |  |  |             { | 
 |  |  |                 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 | 
 |  |  |                     { | 
 |  |  |                         // 瀛樺偍璇锋眰鏁版嵁 | 
 |  |  |                         await RequestDataLog(context); | 
 |  |  |                         requestParam = RequestDataLog(context); | 
 |  |  |                         context.Request.Body.Position = 0; | 
 |  |  |                     } | 
 |  |  |                     catch { } | 
 |  |  | 
 |  |  |                     try | 
 |  |  |                     { | 
 |  |  |                         // 瀛樺偍鍝嶅簲鏁版嵁 | 
 |  |  |                         ResponseDataLog(context.Response, ms); | 
 |  |  |                         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 | 
 |  |  |                 { | 
 |  |  | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |         private async Task RequestDataLog(HttpContext context) | 
 |  |  |         private string RequestDataLog(HttpContext context) | 
 |  |  |         { | 
 |  |  |             var request = context.Request; | 
 |  |  |             var sr = new StreamReader(request.Body); | 
 |  |  |             //long length = request.Body.Length; | 
 |  |  |             RequestLogInfo requestResponse = new RequestLogInfo() | 
 |  |  |             if (request.ContentType?.ToLower() != "multipart/form-data" && request.ContentLength <= 100000) | 
 |  |  |             { | 
 |  |  |                 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; | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |                 var sr = new StreamReader(request.Body); | 
 |  |  |  | 
 |  |  |         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 => | 
 |  |  |                 object obj = new | 
 |  |  |                 { | 
 |  |  |                     LogLock.OutLogAOP("鎺ュ彛鏃ュ織", new string[] { "鍝嶅簲鏁版嵁 -  鍝嶅簲鏁版嵁绫诲瀷:" + responseBody.GetType().ToString(), responseBody }); | 
 |  |  |                     QueryString = request.QueryString.ToString(), | 
 |  |  |                     BodyData = sr.ReadToEndAsync().Result | 
 |  |  |                 }; | 
 |  |  |  | 
 |  |  |                 }); | 
 |  |  |                 string data = JsonConvert.SerializeObject(obj); | 
 |  |  |  | 
 |  |  |                 request.Body.Position = 0; | 
 |  |  |  | 
 |  |  |                 return data; | 
 |  |  |             } | 
 |  |  |             return ""; | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     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; } | 
 |  |  |         private string ResponseDataLog(HttpResponse response) | 
 |  |  |         { | 
 |  |  |             if (response.ContentType?.ToLower() != "multipart/form-data" && 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 ""; | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  | } |