Чистый способ отловить все ошибки, возникающие в приложении MVC 3.0? - PullRequest
21 голосов
/ 03 января 2012

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

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

Я читал о том, как записать его в файл global.asax ... но я также читал, что он не получает их ВСЕ.

Кто-нибудь есть какие-либо предложения или может указать мне правильное направление?

Ответы [ 2 ]

24 голосов
/ 03 января 2012

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/

Myсоветуем , а не использовать что-нибудь вроде Application_Error в Global.asax.cs.

2 голосов
/ 03 января 2012

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

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

  Server.ClearError();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...