Подтвердить что ты не робот

Чистый способ уловить все ошибки, возникшие в приложении MVC 3.0?

Я создаю сайт электронной коммерции MVC 3.0. Я хочу избежать блокировки блоков try-catch по всему моему коду.

Вопрос довольно прост. Какова хорошая стратегия для сбора всех ошибок, которые возникают на моем веб-сайте? Я хочу знать обо всех из них... поэтому я могу работать над тем, чтобы подсчитать до 0, как только сайт начнет жить. Я планирую записывать каждую ошибку в журнал, а также отправлять его по электронной почте.

Я прочитал некоторые сведения об их захвате в файле global.asax... но я также прочитал, что он не получает ВСЕ из них.

У кого-нибудь есть предложения или могут указывать на меня в хорошем направлении?

4b9b3361

Ответ 1

Способом решения этой проблемы MVC является фильтр. Если вы уже на MVC3, глобальные фильтры для вас. Существует специальный тип фильтра для передачи ошибок: фильтр HandleError. Эта статья описывает большую часть ее использования.

Вы можете реализовать свой собственный фильтр и управлять всеми аспектами необработанных исключений, например:

public class HandleExceptionsAttribute : HandleErrorAttribute
{
    public override void OnException(ExceptionContext filterContext)
    {
        var expception = filterContext.Exception;

        // custom code here..
    }
}

Наконец, если вы хотите, чтобы все необработанные исключения сохранялись и регистрировались, ELMAH, то есть ELMAH.MVC - лучший выбор. Установите его с помощью пакета NuGet, настройте его, и все данные будут доступны по ссылке, например:

http://yourapp/admin/elmah/

Мое предложение не использовать ничего, как Application_Error в Global.asax.cs.

Ответ 2

Вы можете обработать любое брошенное исключение в Global.asax.

protected void Application_Error(object sender, EventArgs e) 
{
  Exception exception = Server.GetLastError();
  // global handling code goes here

  Server.ClearError();
}