Обработка глобальных ошибок MVC: ошибка Application_Error не срабатывает - PullRequest
11 голосов
/ 05 апреля 2009

Я пытаюсь реализовать глобальную обработку ошибок в моем приложении MVC.

У меня есть некоторая логика внутри Application_Error, которая перенаправляет на ErrorController, но она не работает.

У меня есть точка останова внутри моего Application_Error метода в Global.aspx.

Когда я навязываю исключение, точка останова не попадает. Есть идеи почему?

Ответы [ 3 ]

10 голосов
/ 05 апреля 2009

Вы можете попробовать этот подход для тестирования:

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 голосов
/ 05 апреля 2009

Я думаю, что лучший способ справиться с этим - использовать HandleErrorAttribute для украшения вашего контроллера (возможно, базового контроллера). Это даст вам возможность вести журнал или обрабатывать ошибки в разных контроллерах с разными ошибками, расширяя этот атрибут и модифицируя его в соответствии с вашими потребностями, например, изменяя представление, которое отображается. Использование этого атрибута использует стандартную обработку фильтра в MVC и создает страницу с использованием представлений, а не записывает непосредственно в ответ, как вы могли бы сделать с помощью Application_Error.

0 голосов
/ 05 апреля 2009

Я не могу точно сказать вам, что не так, но я могу придумать пару вещей, которые нужно проверить ... во-первых, VS нарушает исключение? Если вы находитесь в отладчике, я думаю, это значение по умолчанию. Если это просто нажать F5, пока вы не получите код с точкой останова. Кроме того, вы уверены, что нигде не обрабатываете исключение до того, как оно достигнет Application_Error?

Еще одна вещь, которую нужно проверить - режим CustomErrors в web.config, установлен на Off, верно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...