Exception Handling w ASP.NET Core Web API to proces obsługi wyjątków (exceptions), które mogą wystąpić podczas przetwarzania żądań HTTP w Twojej aplikacji. Aby obsługiwać wyjątki w sposób spójny i kontrolowany, często korzysta się z tzw. "exception middleware". Jest to fragment oprogramowania pośredniczącego (middleware), który przechwytuje wyjątki i odpowiednio je przetwarza, zamiast pozwalać im przeniknąć do góry w stosie wywołań. Oto kroki, jak to zrobić w ASP.NET Core Web API:

  1. Utwórz Middleware do Obsługi Wyjątków:

    Utwórz własny middleware do obsługi wyjątków. To jest klasa, która dziedziczy po Middleware, i zawiera logikę obsługi wyjątków. Oto przykład prostego middleware obsługującego wyjątki:

    using Microsoft.AspNetCore.Http;
    using System;
    using System.Threading.Tasks;
    
    public class ExceptionMiddleware
    {
        private readonly RequestDelegate _next;
    
        public ExceptionMiddleware(RequestDelegate next)
        {
            _next = next;
        }
    
        public async Task InvokeAsync(HttpContext context)
        {
            try
            {
                await _next(context);
            }
            catch (Exception ex)
            {
                // Obsługa wyjątku, np. zapis do dziennika (logowanie) lub zwrócenie odpowiedzi HTTP z błędem.
                context.Response.ContentType = "application/json";
                context.Response.StatusCode = StatusCodes.Status500InternalServerError;
    
                await context.Response.WriteAsync("Wystąpił błąd.");
            }
        }
    }
    
  2. Zarejestruj Middleware w Startup.cs:

    W klasie Startup.cs zarejestruj swoje middleware w metodzie Configure. Upewnij się, że jest ono zarejestrowane przed innymi komponentami oprogramowania pośredniczącego, które mogą przetwarzać żądania.

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // Inne konfiguracje
    
        app.UseMiddleware<ExceptionMiddleware>();
    
        // Inne komponenty oprogramowania pośredniczącego
    }
    
  3. Obsłuż Wyjątki w Middleware:

    W swoim middleware możesz obsługiwać różne rodzaje wyjątków zgodnie z własnymi potrzebami. W przykładzie powyżej obsługujemy wszystkie wyjątki ogólnym błędem HTTP 500 Internal Server Error.

    Jeśli chcesz obsługiwać różne rodzaje wyjątków w różny sposób, możesz wykorzystać konstrukcję catch do wyłapywania konkretnych typów wyjątków i podejmowania odpowiednich działań w zależności od rodzaju błędu.

  4. Testowanie:

    Upewnij się, że testujesz swoje middleware obsługujące wyjątki, aby potwierdzić, że działa ono zgodnie z oczekiwaniami. Wywołaj żądania HTTP, które mogą prowadzić do wyjątków, i sprawdź, czy obsługa wyjątków działa zgodnie z Twoimi oczekiwaniami.

Dzięki wykorzystaniu middleware do obsługi wyjątków w ASP.NET Core Web API możesz zapewnić spójne i kontrolowane reakcje na błędy, co jest ważne dla bezpieczeństwa i niezawodności Twojej aplikacji. Możesz dostosować obsługę wyjątków do swoich konkretnych potrzeb, na przykład logując błędy, generując odpowiedzi JSON lub wykonując inne czynności zgodnie z wymaganiami Twojej aplikacji.

Materiały

Global Error Handling in ASP.NET Core Web API - Code Maze

Handle errors in ASP.NET Core web APIs

Elegant Global Error Handling Using Middleware In ASP.NET Core