Как настроить глобальный обработчик ошибок в 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 и т.д.