Использование HandleErrorAttribute в приложении ASP.NET MVC

У меня есть вопрос о том, как лучше всего использовать HandleErrorAttribute в моем приложении MVC 5. Как мы знаем, мы можем добавить этот атрибут в такие глобальные фильтры:

 filters.Add(new HandleErrorAttribute{View = "Error"});

Это подразумевает, что приложение отображает представление "Ошибка" каждый раз, когда на любом уровне приложения возникает необработанное исключение. Но если у меня есть какая-то логика в другом глобальном фильтре авторизации или действия, который выдает какое-то исключение, то, когда исключение выдается впервые, приложение пытается перенаправить в представление ошибок, снова другие фильтры начинают выполняться и выдают то же исключение опять же, поэтому asp.net, чтобы избежать зацикливания, завершает работу приложения. Итак, каков наилучший способ использовать этот атрибут HandleErrorAttribute, чтобы избежать такого поведения? Спасибо!

Изменить: После некоторой отладки я обнаружил, что это не обычное поведение HandleErrorAttribute, поэтому зацикливание происходит для меня, только когда я использую пользовательские маршруты, например

{key}/{controller}/{action}

и когда в логике фильтра возникает какая-то ошибка, приложение пытается перенаправить в представление ошибок, но опять начинает действовать другая логика фильтра, и я даже вижу значение "Ошибка" в параметре маршрута {key}, поэтому оно нежелательно поведение. Когда я использую маршрут по умолчанию {controller}/{action} этого не происходит, и я точно получаю представление об ошибках, не выполняя глобальную логику фильтра во второй раз.

Ответ 1

Вы должны обернуть логику фильтра действий внутри try catch, затем внутри блока catch, перенаправить на представление Error и передать Exception.

Ваша единственная альтернатива - полностью отключить HandleError и использовать событие Application_Error внутри Global.asax для управления обработкой ошибок. Таким образом вы можете перенаправить свое действие Error внутри, вне зависимости от того, где произошла ошибка.