using System.Net; using System.Text.Json; namespace DbFirst.API.Middleware; public class ExceptionHandlingMiddleware { private readonly RequestDelegate _next; private readonly ILogger _logger; public ExceptionHandlingMiddleware(RequestDelegate next, ILogger logger) { _next = next; _logger = logger; } public async Task InvokeAsync(HttpContext context) { try { await _next(context); } catch (Exception ex) { _logger.LogError(ex, "Unhandled exception"); await WriteProblemDetailsAsync(context, ex); } } private static async Task WriteProblemDetailsAsync(HttpContext context, Exception ex) { if (context.Response.HasStarted) { throw ex; } context.Response.Clear(); context.Response.StatusCode = (int)HttpStatusCode.InternalServerError; context.Response.ContentType = "application/json"; var problem = new { type = "https://tools.ietf.org/html/rfc9110#section-15.6.1", title = "Serverfehler", status = context.Response.StatusCode, detail = ex.Message, traceId = context.TraceIdentifier }; await context.Response.WriteAsync(JsonSerializer.Serialize(problem)); } }