Foto de Miguel Á. Padriñán 

Lo más importante es que entreis en esta documentción de IExceptionHandler Interface, pero si quieres ver rápidamente como trabajar con las excepciones segun .NET8 continua leyendo.

Esta interfaz tiene solo un método TryHandleAsync.

TryHandleAsync intenta gestionar la excepción especificada dentro del pipeline de ASP.NET Core. Si la excepción puede ser gestionada, devuelve verdadero. Si la excepción no puede ser gestionada, devuelve falso. Esto te permitirá implementar una lógica de gestión de excepciones personalizada para diferentes escenarios.

Por ejemplo:

internal sealed class BadRequestExceptionHandler : IExceptionHandler
{
    private readonly ILogger<BadRequestExceptionHandler> _logger;

    public BadRequestExceptionHandler(ILogger<BadRequestExceptionHandler> logger)
    {
        _logger = logger;
    }

    public async ValueTask<bool> TryHandleAsync(
        HttpContext httpContext,
        Exception exception,
        CancellationToken cancellationToken)
    {
        if (exception is not BadRequestException badRequestException)
        {
            return false;
        }

        _logger.LogError(
            badRequestException,
            "Exception occurred: {Message}",
            badRequestException.Message);

        httpContext.Response.StatusCode = StatusCodes.Status400BadRequest;

        await httpContext.Response
            .WriteAsJsonAsync(badRequestException.Message, cancellationToken);

        return true;
    }
}

En la Inyección de dependencias tendrás que usar:

builder.Services.AddExceptionHandler<BadRequestExceptionHandler>();

Y:

app.UseExceptionHandler();

Conclusión:

¿Significa esto qué debo dejar de usar middleware para la gestión de excepciones en ASP.NET Core? evidentemente no, puedes continuar usandolo.

Pero lo importante es el movimiento que vemos de .NET8 con nuevas opciones de trabajo.