В веб-приложении MVC3 я использовал
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
применить глобальную обработку ошибок, когда пользователю показывалось представление «Ошибка», если возникало необработанное исключение.
Для одного конкретного представления я также хотел, чтобы отображалось другое представление ошибок, если возникло необработанное исключение, украсив метод [HandleError(View = "SpecialError")]
. Это сработало нормально.
Затем я хотел добавить глобальную регистрацию необработанных исключений. Я создал собственный атрибут HandleError с кодом регистрации :
public class MyHandleErrorAttribute : HandleErrorAttribute
{
public override void OnException(ExceptionContext context)
{
// Write to log code
base.OnException(context);
}
}
. И обновлены RegisterGlobalFilters и оформление метода, чтобы использовать вместо этого имя атрибута. Обычно это работает, но когда в методе, украшенном MyHandleError(View = "SpecialError")]
, возникает исключение, метод OnException вызывается дважды . Первоначально я предположил, что украшение метода этим атрибутом заменяет глобальный обработчик, но кажется, что он просто добавлен к (, что имеет больше смысла, но это не то, что мне нужно ). При двойном вызове OnException одно и то же исключение регистрируется дважды, что не должно происходить.Я не думаю, что OnException вызывается дважды , потому что это настраиваемый атрибут -Я полагаю, что это происходит и со стандартным атрибутом HandleError, просто теперь он виден, когда я создаю запись о нем.
В конечном счете, я хочу регистрировать все необработанные исключения (один раз ), сохраняя при этом функции, предлагаемые [HandleError], в частности, устанавливая различные представления для конкретных исключений метода. Есть ли чистый способ сделать это?