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, правильно?