Фильтр MVC HandleError не поймал исключение

У меня есть веб-приложение MVC 3, в котором я использую "HandleError" Фильтр действий для обработки исключений. Я реализовал этот фильтр действий следующим образом:

[HandleError]
public class BaseController : Controller {...}

Это базовый класс, от которого унаследованы все мои контроллеры. В моем web.config есть , а в моей общей папке есть Error.cshtml (.cshtml, потому что я использую Razor). Все работает нормально, и я получаю прекрасную обработку исключений (отформатированных моей функцией)

Недавно каким-то образом я получил и «необработанное исключение (YSOD)», а из-за «customErrors» я получил сообщение об ошибке ASP.Net по умолчанию, в котором не было никакой информации о фактическом исключении. Это произошло в сообщении AJAX. Однако я не могу его воспроизвести.

Могут ли какие-либо ошибки избежать этого фильтра действий?


person Hemant Tank    schedule 29.08.2012    source источник


Ответы (1)


Могут ли какие-либо ошибки избежать этого фильтра действий?

HandleError фильтр не улавливает все исключения, запущенные в приложении. Он может захватывать исключения, которые запускаются внутри действий, фильтров действий ... просто внутри контекста MVC. Также он не фиксирует HTTP исключения, имеющие код состояния, отличный от 500. Полагаться только на HandleError фильтр в приложении MVC - плохая идея.

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

Я написал в блоге сообщение на эту тему, которое может вам помочь.

person VJAI    schedule 30.08.2012
comment
Марк, извини за опоздание. Да, я встречал некоторые исключения, такие как UnauthorizedAccessException (возможно, доступ к файлам). Я согласен, что Application_Error, вероятно, будет последним этапом для его обнаружения. Однако [HandleError] больше похож на MVC - как насчет этого сообщения (stackoverflow .com / questions / 183316 / asp-net-mvc-handleerror - 3-й ответ), который позволяет фиксировать такие исключения. ELMAH подходит для ведения журнала. - person Hemant Tank; 04.09.2012
comment
Вчера я попробовал ваш код Application_Error, и он не смог обработать исключение UnauthorizedAccessException. Позже после того, как я изменил код на controller.ViewData.Model = new HandleErrorInfo (ex, currentController, currentAction); - это сработало! Я хотел знать, сосуществует ли это с [HandleError] или вы бы сказали, что после Application_error [HandleError] больше не нужен. - person Hemant Tank; 08.09.2012
comment
Это должен быть controller.ViewData.Model = new HandleErrorInfo () - person VJAI; 08.09.2012
comment
Прежде чем отметить ваш ответ, я просто хотел подтвердить, лучший ли это курорт? Я имею в виду, если это просто установка кода состояния или Application_Error - верное место, где произойдет ошибка. И последнее - надеюсь, он сможет работать параллельно с ELMAH (для логирования). - person Hemant Tank; 10.09.2012
comment
По сравнению с HandleError я скажу, что Application_Error - лучший вариант. Дело не в установке кода состояния, а в перехвате всех исключений, созданных в приложении. Если вы собираетесь использовать ELMAH, я не думаю, почему вы хотите использовать Application_Error, потому что ELMAH будет обрабатывать все необработанные исключения и регистрировать их. По сравнению с Application_Error я могу предложить ELMAH, но единственное, что вы хотите - выяснить, как возвращать разные представления для разных ошибок (могут быть customErrors). - person VJAI; 11.09.2012
comment
Да, конечно, если мы пойдем с ELMAH, тогда мне вообще не нужно было бы ничего обрабатывать (надеюсь). И я считаю, что без него Application_Error было бы достаточно. Спасибо. - person Hemant Tank; 11.09.2012
comment
Привет, Марк, если ты все еще слушаешь, я не могу показать отформатированное исключение с помощью ELMAH. Я могу настроить журнал ошибок, в котором перечислены все ошибки и отображаются подробности при нажатии. Но мне нужно отображать отформатированные детали исключения, когда возникает исключение - есть ли у ELMAH это? Или мне нужно сохранить Application_Error - person Hemant Tank; 13.09.2012
comment
@HemantTank Можете ли вы опубликовать это как отдельный вопрос? так что другие тоже могут вам помочь. - person VJAI; 13.09.2012
comment
Согласен, этот зарос. Вот и все - stackoverflow.com/questions/12412214/ < / а> - person Hemant Tank; 13.09.2012