TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.74K subscribers
Post #1945 1.67K
День 1599. #ЧтоНовенького
Улучшенная Обработка Исключений в
ASP.NET Core 8. Начало
ASP.NET Core 8 скоро выйдет и принесёт крутые улучшения: больше не нужно писать своё промежуточное ПО для обработки исключений!

В ASP.NET Core 8 вы можете создать класс, реализующий интерфейс IExceptionHandler:
public interface IExceptionHandler
{
ValueTask<bool> TryHandleAsync(
HttpContext httpContext,
Exception exception,
CancellationToken cancellationToken);
}

Важная вещь: нужно вернуть True или False:
- при True выполнение конвейера завершится, и другое промежуточное ПО в конвейере не будет вызываться.
- при False, конвейер продолжит выполнение.
public class DefaultExHandler : 
IExceptionHandler
{
private ILogger<DefaultExHandler> _logger;
public DefaultExHandler(
ILogger<DefaultExHandler> logger)
{
_logger = logger;
}

public async ValueTask<bool> TryHandleAsync(
HttpContext ctx,
Exception ex,
CancellationToken ct)
{
_logger.LogError(ex, "Error occurred");

await httpContext.Response
.WriteAsJsonAsync(
new ProblemDetails
{
Status = (int)HttpStatusCode.InternalServerError,
Type = ex.GetType().Name,
Title = "Error occurred",
Detail = ex.Message,
Instance = $"{httpContext.Request.Method} {httpContext.Request.Path}"
});

return true;
}
}

Вы можете записать в ответ что угодно. Здесь это экземпляр ProblemDetails, потому что это стандарт RFC для обработки ошибок, возвращаемых в ответах HTTP API. Код состояния HTTP по умолчанию — 500, но его можно настроить:
httpContext.Response.StatusCode = 
(int)HttpStatusCode.RequestTimeout;

Регистрация обработчика ошибок:
var builder = WebApplication.CreateBuilder(args);
builder.Services
.AddExceptionHandler<DefaultExHandler>();

var app = builder.Build();
app.UseExceptionHandler(opt => { });
…
app.Run();

Окончание следует…

Источник:
https://anthonygiretti.com/2023/06/14/asp-net-core-8-improved-exception-handling-with-iexceptionhandler/
  • 👍 12
More from @netdeveloperdiary
  1. Sep 26, 2026День 2796. #ЗаметкиНаПолях #AI Рабочий процесс с Copilot для .NET. Продолжение Начало Три…
  2. Sep 25, 2026День 2795. #ЗаметкиНаПолях #AI Рабочий процесс с Copilot для .NET. Начало Проблема с позиц…
  3. Sep 24, 2026День 2794. #Оффтоп #Здоровье Сегодня будет необычный пост. Завтра в Москве стартует конфер…
  4. Sep 23, 2026День 2793. #ЗаметкиНаПолях #SQL 10 Редких Возможностей SQL, Которые Стоит Знать Каждому. Ч…
  5. Sep 22, 2026День 2792. #ЗаметкиНаПолях #SQL 10 Редких Возможностей SQL, Которые Стоит Знать Каждому. Ч…
  6. Sep 21, 2026🔍Тестовое собеседование с Senior C# разработчиком уже завтра 22 сентября(уже завтра!) в 1…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →