2013-04-26 2 views
3

В настоящее время я использую mvc4 с vs2012, и я установил mugc.elmah nugget, и все сделано.Уточнение при использовании ELAMH в ASP.NET MVC

Что я сделал?

Первоначально я не писал ни одного кода, и мое исключение было зарегистрировано в ELMAH.

Позже я решил использовать MVC HandleError для обработки исключений приложений и добавил фильтр

filters.Add(new HandleErrorAttribute()); 

Теперь я отлажена в фильтрах и посмотреть, у меня есть 2 фильтра один для ELMAH HandleErrorAttribute and MVC HandleErrorAttribute !

Я видел эту замечательную ссылку https://stackoverflow.com/a/5936867/1481690 которая говорит об использовании ErrorSignal для обработки исключений приложений

Но я не использую ErrorSignal, но все же мои Исключения захвачены ELMAH?

Если я использую

if (context.ExceptionHandled) 
      ErrorSignal.FromCurrentContext().Raise(context.Exception); 

Мои исключения регистрируются дважды.

Мой вопрос следующим образом

  • мне нужно использовать 2-х фильтров (Elmah и MVC) делать?
  • Если ELMAH уже имеет исключение HandleErrorAttribute и журнала. Нужно ли добавлять MVC HandleErrorAttribute?

Что я делаю в настоящее время

Добавлен фильтр

filters.Add(new HandleErrorAttribute()); 

и наиважнейшая (Для обработки Ajax Ошибка в будущем)

public class HandleErrorAttribute : System.Web.Mvc.HandleErrorAttribute 
    { 
     public override void OnException(ExceptionContext context) 
     { 
base.OnException(context); 
} 

Достаточно ли этого или что такое хорошо практика? Я не поднимаю ErrorSignal, поскольку он дважды записывается в журнал.

Не пользуйтесь никаким try.catch, поскольку я использую нижнюю строку и надеюсь, что мое исключение обработано.

base.OnException(context); 

}

Просто хочу, чтобы убедиться, что я на правильном пути!

Спасибо за внимание

ответ

2

Я верю, что у вас есть это правильно. Это в моем Global.asax.cs

private static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new ElmahHandleErrorAttribute()); 
     filters.Add(new HandleErrorAttribute()); 
    } 

Одна вещь, чтобы проверить, что ваши контроллеры не имеют либо [ElmahHandleError] или [HandleError] атрибутов.

5

UPDATE: Я указал на неправильный вопрос обновления пакета.

Вы не нуждаетесь в обоим. ElmahHandleErrorAttribute наследует от HandleErrorAttribute, поэтому использование обоих является избыточным.

How to get ELMAH to work with ASP.NET MVC [HandleError] attribute?

Вам также не нужно поднимать какие-либо сигналы Elmah, то ElmahHandleErrorAttribute обрабатывает это.

Если вы используете Elmah.Contrib.MVC от Nuget, то все, что вам нужно, это ElmahHandleErrorAttribute.

filters.Add(new Elmah.Contrib.MVC.ElmahHandleErrorAttribute()); 

Там также пакет там, что я принял за этот в Elmah.MVC сделано одним и тем же автором, как Elmah, я смотрю на этот, чтобы выяснить, каковы различия и как использовать его.

UPDATE 2: Хорошо, так что, видимо, Elmah.MVC пакет имеет все это встраивается, и они регистрируют почти все для вас, используя WebActivator. Таким образом, буквально все, что вам нужно сделать в новом проекте MVC, чтобы начать отслеживание ошибок с Elmah, - это установить пакет и скомпилировать. Готово. Однако вы должны проверить свой web.config после его установки, а в AppSettings - установить роль, необходимую для просмотра страницы и включения проверки подлинности.