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))