MVC Обработка глобальных ошибок: Application_Error не работает
Я пытаюсь внедрить глобальную обработку ошибок в моем приложении MVC.
У меня есть некоторая логика внутри моего Application_Error
, которая перенаправляется на ErrorController
, но не работает.
У меня есть точка останова внутри моего метода Application_Error
в Global.aspx
.
Когда я принудию исключение, точка останова не попадает. Любые идеи, почему?
Ответы
Ответ 1
Вы можете попробовать этот подход для тестирования:
protected void Application_Error(object sender, EventArgs e)
{
var error = Server.GetLastError();
Server.ClearError();
Response.ContentType = "text/plain";
Response.Write(error ?? (object) "unknown");
Response.End();
}
Web.config
<customErrors mode="Off" />
Ответ 2
Я думаю, что лучший способ справиться с этим - использовать HandleErrorAttribute, чтобы украсить ваш контроллер (возможно, базовый контроллер). Это даст вам возможность вести журнал или обрабатывать ошибки в разных контроллерах с различными ошибками, расширив этот атрибут и изменив его в соответствии с вашими потребностями, скажем, изменив отображаемое представление. Использование этого атрибута использует стандартную обработку фильтра в MVC и создает страницу с использованием представлений, а не напрямую записывает ответ, как вы могли бы использовать Application_Error.
Ответ 3
Я не могу точно сказать, что случилось, но я могу подумать о нескольких вещах, чтобы проверить... во-первых, это VS, нарушающий исключение? Если вы находитесь в отладчике, я думаю по умолчанию. Если он просто ударил F5, пока вы не дойдете до кода с точкой останова. Кроме того, вы уверены, что не обрабатываете исключение нигде до того, как оно достигнет Application_Error
?
Еще одна вещь, которую нужно проверить - CustomErrors
mode в web.config, она установлена на Off
, правильно?