From 0fb3fd1d06fa43cdd9f540fca29a05bf404a20a8 Mon Sep 17 00:00:00 2001 From: Suphonchai Phoonsawat Date: Thu, 27 Mar 2025 12:24:58 +0700 Subject: [PATCH] =?UTF-8?q?fix=20Convert=20FormData=20=E0=B9=81=E0=B8=A5?= =?UTF-8?q?=E0=B9=89=E0=B8=A7=E0=B9=80=E0=B8=82=E0=B8=B5=E0=B8=A2=E0=B8=99?= =?UTF-8?q?=E0=B8=A5=E0=B8=87=20Logs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Middlewares/DateTimeFixConverter.cs | 25 ++++++++++++ .../Middlewares/RequestLoggingMiddleware.cs | 40 ++++++++++++++++++- 2 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 BMA.EHR.Domain/Middlewares/DateTimeFixConverter.cs diff --git a/BMA.EHR.Domain/Middlewares/DateTimeFixConverter.cs b/BMA.EHR.Domain/Middlewares/DateTimeFixConverter.cs new file mode 100644 index 00000000..2bd9dc76 --- /dev/null +++ b/BMA.EHR.Domain/Middlewares/DateTimeFixConverter.cs @@ -0,0 +1,25 @@ +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace BMA.EHR.Domain.Middlewares +{ + public class DateTimeFixConverter : JsonConverter + { + public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + if (reader.TokenType == JsonTokenType.String) + { + if (DateTime.TryParse(reader.GetString(), out var date)) + { + return date; + } + } + throw new JsonException("Invalid date format."); + } + + public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options) + { + writer.WriteStringValue(value.ToString("yyyy-MM-dd")); + } + } +} diff --git a/BMA.EHR.Domain/Middlewares/RequestLoggingMiddleware.cs b/BMA.EHR.Domain/Middlewares/RequestLoggingMiddleware.cs index 55dcf051..f84253e7 100644 --- a/BMA.EHR.Domain/Middlewares/RequestLoggingMiddleware.cs +++ b/BMA.EHR.Domain/Middlewares/RequestLoggingMiddleware.cs @@ -97,7 +97,43 @@ namespace BMA.EHR.Domain.Middlewares string requestBody = await ReadRequestBodyAsync(context); if (requestBody != "") - requestBodyJson = JsonSerializer.Serialize(JsonSerializer.Deserialize(requestBody), new JsonSerializerOptions { Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping, WriteIndented = true }); + { + if(context.Request.HasFormContentType) + { + var form = await context.Request.ReadFormAsync(); // อ่าน form-data + + var formData = new Dictionary(); + foreach (var field in form) + { + formData[field.Key] = field.Value.ToString(); + } + // อ่านไฟล์ที่ถูกส่งมา (ถ้ามี) + if (form.Files.Count > 0) + { + var fileDataList = new List(); + + foreach (var file in form.Files) + { + fileDataList.Add(new + { + FileName = file.FileName, + ContentType = file.ContentType, + Size = file.Length + }); + } + + formData["Files"] = fileDataList; + } + + requestBodyJson = JsonSerializer.Serialize(formData, new JsonSerializerOptions { Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping, WriteIndented = true, Converters = { new DateTimeFixConverter() } }); + } + else + { + requestBodyJson = JsonSerializer.Serialize(JsonSerializer.Deserialize(requestBody), new JsonSerializerOptions { Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping, WriteIndented = true, Converters = { new DateTimeFixConverter() } }); + } + } + + var originalBodyStream = context.Response.Body; @@ -134,7 +170,7 @@ namespace BMA.EHR.Domain.Middlewares memoryStream.Seek(0, SeekOrigin.Begin); var responseBody = new StreamReader(memoryStream).ReadToEnd(); if (responseBody != "") - responseBodyJson = JsonSerializer.Serialize(JsonSerializer.Deserialize(responseBody), new JsonSerializerOptions { Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping, WriteIndented = true }); + responseBodyJson = JsonSerializer.Serialize(JsonSerializer.Deserialize(responseBody), new JsonSerializerOptions { Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping, WriteIndented = true, Converters = { new DateTimeFixConverter() } }); var json = JsonSerializer.Deserialize(responseBody); if (json.TryGetProperty("message", out var messageElement))