Как настроить глобальный обработчик ошибок в WebApi?
Я создаю приложение .NET WebApi, и я хотел бы настроить глобальный обработчик ошибок (в основном это функция, которая выполняется, когда исключение пузырится из любого места приложения). эта ссылка поддерживает поддержку этого, но предлагается несколько обходных решений. К сожалению, я не могу найти полезную документацию для любого из них.
Вот мои требования:
- Исключение исключений в методах действий, а также в других местах (например, разрешение контроллера).
- У меня есть доступ к исходному объекту Exception во время моей обработки.
- У меня есть доступ к сервисам в моем контейнере (Autofac) IOC во время процесса обработки ошибок (это очень важно, но не обязательно).
- Нет зависимости от MVC (я использую чистый WebApi). Никакая зависимость от IIS крайне желательна.
Как мне это настроить?
Ответы
Ответ 1
Если вы обновляетесь до Web API v2.1, доступного через Nuget с помощью этой команды:
Install-Package Microsoft.AspNet.WebApi
Вы можете создать глобальный обработчик исключений, наследуя от Exception Logger.
Вот пример:
class TraceExceptionLogger : ExceptionLogger
{
public override void LogCore(ExceptionLoggerContext context)
{
Trace.TraceError(context.ExceptionContext.Exception.ToString());
}
}
Подробнее в примечаниях к выпуску здесь: http://www.asp.net/web-api/overview/releases/whats-new-in-aspnet-web-api-21#global-error
Ответ 2
Есть несколько вариантов, о которых вам следует знать:
Событие AppDomain.CurrentDomain.FirstChanceException:
Будет срабатывать для каждого исключения независимо от того, обрабатывается ли он. Используйте это для ведения журнала и т.д. Перед вашим конкретным обработчиком.
Событие AppDomain.CurrentDomain.UnhandledException:
Будет ли Fire для каждого исключения, не обрабатываемого кодом
Вам нужно будет создать обработчик в службе, которая имеет доступ к вашему контейнеру IOC и т.д.