diff --git a/src/MaksIT.Core/MaksIT.Core.csproj b/src/MaksIT.Core/MaksIT.Core.csproj
index bdce300..3ead881 100644
--- a/src/MaksIT.Core/MaksIT.Core.csproj
+++ b/src/MaksIT.Core/MaksIT.Core.csproj
@@ -8,7 +8,7 @@
MaksIT.Core
- 1.3.9
+ 1.4.0
Maksym Sadovnychyy
MAKS-IT
MaksIT.Core
@@ -26,6 +26,7 @@
+
diff --git a/src/MaksIT.Core/Webapi/Middlewares/ErrorHandlingMiddleware.cs b/src/MaksIT.Core/Webapi/Middlewares/ErrorHandlingMiddleware.cs
new file mode 100644
index 0000000..d053763
--- /dev/null
+++ b/src/MaksIT.Core/Webapi/Middlewares/ErrorHandlingMiddleware.cs
@@ -0,0 +1,37 @@
+using System.Text.Json;
+
+using Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.Logging;
+
+
+namespace MaksIT.Core.Webapi.Middlewares;
+
+public class ErrorHandlingMiddleware {
+ private readonly RequestDelegate _next;
+ private readonly ILogger _logger;
+
+ public ErrorHandlingMiddleware(RequestDelegate next, ILogger logger) {
+ _next = next;
+ _logger = logger;
+ }
+
+ public async Task Invoke(HttpContext context) {
+ try {
+ await _next(context); // proceed to next middleware
+ }
+ catch (Exception ex) {
+ _logger.LogError(ex, "Unhandled exception");
+
+ context.Response.StatusCode = 500;
+ context.Response.ContentType = "application/json";
+
+ var errorResponse = new {
+ error = "An unexpected error occurred.",
+ details = ex.Message // or omit in production
+ };
+
+ var json = JsonSerializer.Serialize(errorResponse);
+ await context.Response.WriteAsync(json);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/MaksIT.Core/Webapi/Middlewares/TraceIdLoggingScopeMiddleware.cs b/src/MaksIT.Core/Webapi/Middlewares/TraceIdLoggingScopeMiddleware.cs
new file mode 100644
index 0000000..e7376cb
--- /dev/null
+++ b/src/MaksIT.Core/Webapi/Middlewares/TraceIdLoggingScopeMiddleware.cs
@@ -0,0 +1,24 @@
+using System.Diagnostics;
+
+using Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.Logging;
+
+namespace MaksIT.Core.Webapi.Middlewares;
+
+public class TraceIdLoggingScopeMiddleware {
+ private readonly RequestDelegate _next;
+ private readonly ILogger _logger;
+
+ public TraceIdLoggingScopeMiddleware(RequestDelegate next, ILogger logger) {
+ _next = next;
+ _logger = logger;
+ }
+
+ public async Task InvokeAsync(HttpContext context) {
+ var traceId = Activity.Current?.TraceId.ToString() ?? context.TraceIdentifier;
+
+ using (_logger.BeginScope(new Dictionary { ["TraceId"] = traceId })) {
+ await _next(context);
+ }
+ }
+}
\ No newline at end of file