2013-09-26 2 views
10

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

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

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

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

{key}/{controller}/{action} 

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

ответ

9

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

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

+0

Спасибо! Это хороший подход. – igorGIS

+0

как насчет использования ELMAH? –

+1

@Murali Я не поклонник ELMAH, если честно – mattytommo

 Смежные вопросы

  • Нет связанных вопросов^_^