Почему моя собственная реализация IExceptionHandler не перехватывает все исключения в ASP.NET Core?C#

Место общения программистов C#
Anonymous
Почему моя собственная реализация IExceptionHandler не перехватывает все исключения в ASP.NET Core?

Сообщение Anonymous »

Я работаю над приложением ASP.NET Core и реализовал собственный глобальный обработчик исключений, используя интерфейс IExceptionHandler. Моя цель — перехватить и обработать все необработанные исключения, возникающие в приложении, и вернуть ответ «ProblemDetails». Вот код моего класса GlobalExceptionHandler:

Код: Выделить всё

public class GlobalExceptionHandler : IExceptionHandler {

private readonly ILogger _logger = Log.ForContext(typeof(GlobalExceptionHandler));

public async ValueTask TryHandleAsync(HttpContext httpContext, Exception exception, CancellationToken cancellationToken)
{
_logger.Error(exception, "Global Exception Handler");
var problemDetails = new ProblemDetails{
Status = (int)HttpStatusCode.InternalServerError,
Title = "An exception occurred",
Detail = exception.Message         };

httpContext.Response.StatusCode = problemDetails.Status.Value;
httpContext.Response.ContentType = "application/problem+json";
await httpContext.Response.WriteAsJsonAsync(problemDetails, cancellationToken);
return true;
}
}
Однако я заметил, что этот обработчик перехватывает только те исключения, которые создаются явно (например, `throw new Exception("...")`), а не те, которые возникают естественным образом внутри приложения. , например исключения нулевых ссылок или другие ошибки времени выполнения. Вопросы:
1. Почему моя реализация IExceptionHandler не перехватывает все исключения в приложении?

3. Если `IExceptionHandler` не подходит для этой цели, каков рекомендуемый способ глобальной обработки всех необработанных исключений без написания специального промежуточного программного обеспечения (причина, по которой мы используем Microsoft.AspNetCore.Diagnostics.IExceptionHandler, заключается в том, что он не требует от нас написания промежуточное программное обеспечение)?
Будем очень признательны за любые рекомендации или передовой опыт!

Подробнее здесь: https://stackoverflow.com/questions/789 ... exceptions

Вернуться в «C#»