Обработка ошибок в ASP.NET Core C#

Обработка ошибок является важным аспектом разработки приложений на ASP.NET Core. Фреймворк предоставляет встроенные инструменты для перехвата, логирования и управления исключениями, что позволяет минимизировать влияние ошибок на работу системы.

Механизмы обработки ошибок

ASP.NET Core поддерживает различные подходы к обработке ошибок. Основной механизм реализуется посредством middleware, позволяющего централизованно перехватывать исключения, возникающие в процессе обработки запросов. В режиме разработки используется страница с подробной информацией об ошибке, а в рабочей среде – универсальный обработчик, скрывающий детали сбоя.

Middleware для обработки исключений

Использование встроенного middleware позволяет задать поведение при возникновении ошибок. Конфигурация происходит в методе Configure. При обнаружении исключения middleware перенаправляет запрос на специальную страницу или возвращает стандартное сообщение об ошибке.

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    } 
    else 
    {
        app.UseExceptionHandler("/Home/Error");
        app.UseHsts();
    }
    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseRouting();
    app.UseAuthorization();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(name: "default", pattern: "{controller=Home}/{action=Index}/{id?}");
    });
}

Создание собственного middleware для обработки ошибок позволяет добавить дополнительное логирование или кастомное поведение.

public class ErrorHandlingMiddleware
{
    private readonly RequestDelegate _next;
    private readonly ILogger<ErrorHandlingMiddleware> _logger;
    
    public ErrorHandlingMiddleware(RequestDelegate next, ILogger<ErrorHandlingMiddleware> logger)
    {
        _next = next;
        _logger = logger;
    }
    
    public async Task InvokeAsync(HttpContext context)
    {
        try
        {
            await _next(context);
        } 
        catch(Exception ex)
        {
            _logger.LogError(ex, "Ошибка во время обработки запроса");
            context.Response.StatusCode = 500;
            await context.Response.WriteAsync("Внутренняя ошибка сервера");
        }
    }
}

Регистрация пользовательского middleware осуществляется в пайплайне обработки запросов.

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseMiddleware<ErrorHandlingMiddleware>();
    app.UseRouting();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

Логирование ошибок

Фреймворк ASP.NET Core интегрирован с системой логирования, позволяющей регистрировать информацию об исключениях. Использование ILogger способствует быстрой диагностике и отслеживанию проблем в режиме реального времени.

Комплексная обработка ошибок в ASP.NET Core реализуется через использование встроенных и пользовательских middleware, а также посредством интеграции с системами логирования. Такой подход обеспечивает надежное управление исключениями, что способствует стабильной работе приложения и облегчает процесс устранения сбоев.