Практическое руководство. Обработка ошибок на уровне приложения

Visual Studio 2010

Обновлен: Ноябрь 2007

В этом примере кода показано, как создать обработчик ошибок в файле Global.asax, который будет перехватывать все необработанные ошибки ASP.NET во время обработки запроса — другими словами, все ошибки, не обнаруженные блоком Try/Catch или обработчиком ошибок на уровне страницы. В этом примере обработчик передает управление универсальной странице ошибок с именем GenericErrorPage, которая интерпретирует ошибку и отображает соответствующее сообщение.

Следующий пример взят из полного примера кода в разделе Пример обработчиков ошибок..

Чтобы включить обработчик событий ошибки в файле Global.asax, файл Web.config не может указывать файл для defaultRedirect. Файл конфигурации имеет приоритет. Поэтому можно либо установить для customErrors значение Off, либо удалить параметр defaultRedirect. Если файл конфигурации Web.config содержит свойство customErrors, которому присвоено значение Off, обработчик событий Application_Error в файле Global.asax будет обрабатывать необработанные ошибки.

24395wz3.alert_security(ru-ru,VS.100).gifПримечание о безопасности.

Нельзя присваивать свойству customErrors в файле Web.config значение Off, если в файле Global.asax не содержится обработчик Application_Error. В этом случае конфиденциальная информация о веб-узле потенциально может быть открытой для всех, что может стать причиной возникновения ошибок на узле.

Для любого кода, который может вызвать ошибки, лучше использовать блоки Try/Catch, а не полагаться на глобальный обработчик ошибок.

Обработчик ошибок, определенный в файле Global.asax, ловит только ошибки, возникающие во время обработки запросов средой выполнения ASP.NET. Например, он обнаружит ошибку, если пользователь запрашивает aspx-файл, которого нет в приложении. Однако если пользователь обратится к несуществующему HTM-файлу, ошибка будет пропущена. Для ошибок, не относящихся к ASP.NET, можно создать пользовательский обработчик в службах IIS. Пользовательский обработчик также нельзя вызвать для ошибок уровня сервера.

Нельзя напрямую выводить сведения об ошибках запросов из файла Global.asax; нужно передать управление другой странице, обычно это страница веб-формы. При передаче управления другой странице используйте метод Transfer. Это сохранит текущий контекст, чтобы можно было получить сведения об ошибке из метода GetLastError.

После обработки ошибки необходимо удалить ее, вызвав метод ClearError объекта Server (класс HttpServerUtility).

Не следует отображать сведения об ошибке, которые могут помочь злоумышленным пользователям повредить данное приложение. Подробные сведения см. в разделе Практическое руководство. Отображение безопасных сообщений об ошибках.

Показ: