Refactor exception handling with new mapping system

Updated `GlobalExceptionHandlerOptions` to use a new `_registeredMappings` dictionary for `HttpExceptionMapping` objects, enhancing flexibility in mapping exceptions to HTTP responses. Renamed `RegisterException` to `Add` to reflect its new functionality. Removed the `HttpResponse` record definition and introduced a new `HttpExceptionMapping` record, which includes a static `Create` method for easier instantiation of mappings.
This commit is contained in:
Developer 02 2025-05-19 14:15:38 +02:00
parent 83ba492b37
commit 9b29a49ad6
3 changed files with 13 additions and 11 deletions

View File

@ -1,14 +1,12 @@
using System.Net;
namespace DigitalData.Core.Exceptions.Middleware;
namespace DigitalData.Core.Exceptions.Middleware;
public class GlobalExceptionHandlerOptions
{
private readonly Dictionary<Type, HttpResponse> _registeredExceptions = new();
private readonly Dictionary<Type, HttpExceptionMapping> _registeredMappings = new();
public GlobalExceptionHandlerOptions RegisterException<TException>(HttpStatusCode statusCode, string? message = null) where TException : Exception
public GlobalExceptionHandlerOptions Add(HttpExceptionMapping mapping)
{
_registeredExceptions[typeof(TException)] = new HttpResponse(statusCode, message);
_registeredMappings[mapping.ExceptionType] = mapping;
return this;
}
}

View File

@ -0,0 +1,9 @@
using System.Net;
namespace DigitalData.Core.Exceptions.Middleware;
public record HttpExceptionMapping(Type ExceptionType, HttpStatusCode StatusCode, Func<Exception, string>? MessageFactory = null)
{
public static HttpExceptionMapping Create<TException>(HttpStatusCode statusCode, Func<Exception, string>? messageFactory = null) where TException : Exception
=> new HttpExceptionMapping(typeof(TException), statusCode, messageFactory);
};

View File

@ -1,5 +0,0 @@
using System.Net;
namespace DigitalData.Core.Exceptions.Middleware;
public record HttpResponse(HttpStatusCode StatusCode, string? Message = null);