Обработка ошибок в ASP.NET имеет три аспекта:
-
Отслеживание — отслеживание выполнения программы на уровне страниц или приложений.
-
Обработка ошибок — обработка стандартных ошибок или пользовательских ошибок на уровне страниц или приложений.
-
Отладка — пошаговое выполнение программы, установка точек останова для анализа кода
Отслеживание — отслеживание выполнения программы на уровне страниц или приложений.
Обработка ошибок — обработка стандартных ошибок или пользовательских ошибок на уровне страниц или приложений.
Отладка — пошаговое выполнение программы, установка точек останова для анализа кода
В этой главе мы обсудим трассировку и обработку ошибок, а в этой главе мы обсудим отладку.
Чтобы понять концепции, создайте следующий пример приложения. Он имеет элемент управления меткой, раскрывающийся список и ссылку. В раскрывающемся списке загружается массив известных цитат, а выбранная цитата отображается на ярлыке ниже. Он также имеет гиперссылку, которая указывает на несуществующую ссылку.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="errorhandling._Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title> Tracing, debugging and error handling </title> </head> <body> <form id="form1" runat="server"> <div> <asp:Label ID="lblheading" runat="server" Text="Tracing, Debuggin and Error Handling"> </asp:Label> <br /> <br /> <asp:DropDownList ID="ddlquotes" runat="server" AutoPostBack="True" onselectedindexchanged="ddlquotes_SelectedIndexChanged"> </asp:DropDownList> <br /> <br /> <asp:Label ID="lblquotes" runat="server"> </asp:Label> <br /> <br /> <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="mylink.htm">Link to:</asp:HyperLink> </div> </form> </body> </html>
Код файла:
public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string[,] quotes = { {"Imagination is more important than Knowledge.", "Albert Einsten"}, {"Assume a virtue, if you have it not" "Shakespeare"}, {"A man cannot be comfortable without his own approval", "Mark Twain"}, {"Beware the young doctor and the old barber", "Benjamin Franklin"}, {"Whatever begun in anger ends in shame", "Benjamin Franklin"} }; for (int i=0; i<quotes.GetLength(0); i++) ddlquotes.Items.Add(new ListItem(quotes[i,0], quotes[i,1])); } } protected void ddlquotes_SelectedIndexChanged(object sender, EventArgs e) { if (ddlquotes.SelectedIndex != -1) { lblquotes.Text = String.Format("{0}, Quote: {1}", ddlquotes.SelectedItem.Text, ddlquotes.SelectedValue); } } }
трассировка
Чтобы включить трассировку на уровне страницы, вам нужно изменить директиву Page и добавить атрибут Trace, как показано ниже:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="errorhandling._Default" Trace ="true" %>
Теперь, когда вы выполняете файл, вы получаете информацию трассировки:
Он предоставляет следующую информацию вверху:
- Идентификатор сессии
- Код состояния
- Время запроса
- Тип запроса
- Кодировка запроса и ответа
Код состояния, отправляемый с сервера, каждый раз, когда запрашивается страница, показывает имя и время ошибки, если таковые имеются. В следующей таблице приведены общие коды состояния HTTP:
Число | Описание |
---|---|
Информационный (100 — 199) | |
100 | Продолжить |
101 | Протоколы переключения |
Успешно (200 — 299) | |
200 | Хорошо |
204 | Без содержания |
Перенаправление (300 — 399) | |
301 | Переехал навсегда |
305 | Используй прокси |
307 | Временный редирект |
Ошибки клиента (400 — 499) | |
400 | Плохой запрос |
402 | Требуется оплата |
404 | Не найдено |
408 | Запрос времени ожидания |
417 | Ожидание не удалось |
Ошибки сервера (500 — 599) | |
500 | Внутренняя ошибка сервера |
503 | Сервис недоступен |
505 | Версия HTTP не поддерживается |
Под информацией верхнего уровня находится журнал трассировки, в котором содержится подробная информация о жизненном цикле страницы. Он предоставляет время в секундах с момента инициализации страницы.
Следующий раздел — дерево элементов управления, в котором перечислены все элементы управления на странице в иерархическом порядке:
Последние в сводках состояния сеанса и приложения, коллекции файлов cookie и заголовков, за которыми следует список всех серверных переменных.
Объект Trace позволяет добавлять пользовательскую информацию в вывод трассировки. Для этого есть два метода: метод Write и метод Warn.
Измените обработчик события Page_Load, чтобы проверить метод Write:
protected void Page_Load(object sender, EventArgs e) { Trace.Write("Page Load"); if (!IsPostBack) { Trace.Write("Not Post Back, Page Load"); string[,] quotes = ....................... } }
Запустите, чтобы наблюдать за эффектами:
Чтобы проверить метод Warn, давайте принудительно введем некоторый ошибочный код в выбранный обработчик события изменения индекса:
try { int a = 0; int b = 9 / a; }catch (Exception e) { Trace.Warn("UserAction", "processing 9/a", e); }
Try-Catch — это программная конструкция на C #. Блок try содержит любой код, который может вызвать или не вызвать ошибку, а блок catch перехватывает ошибку. Когда программа запускается, она отправляет предупреждение в журнал трассировки.
Трассировка уровня приложения применяется ко всем страницам веб-сайта. Это реализуется путем помещения следующих строк кода в файл web.config:
<system.web> <trace enabled="true" /> </system.web>
Обработка ошибок
Хотя ASP.NET может обнаруживать все ошибки времени выполнения, все же могут присутствовать некоторые тонкие ошибки. Наблюдение за ошибками путем отслеживания предназначено для разработчиков, а не для пользователей.
Следовательно, чтобы перехватить такое возникновение, вы можете добавить параметры обработки ошибок в файл web.config приложения. Это обработка ошибок всего приложения. Например, вы можете добавить следующие строки в файл web.config:
<configuration> <system.web> <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm"> <error statusCode="403" redirect="NoAccess.htm" /> <error statusCode="404" redirect="FileNotFound.htm" /> </customErrors> </system.web> <configuration>
Раздел <customErrors> имеет возможные атрибуты:
-
Режим : включает или отключает пользовательские страницы ошибок. Он имеет три возможных значения:
- On : отображает пользовательские страницы.
- Off : отображает страницы ошибок ASP.NET (желтые страницы)
- remoteOnly : отображает пользовательские ошибки для клиента, отображает ошибки ASP.NET локально.
-
defaultRedirect : содержит URL-адрес страницы, отображаемой в случае необработанных ошибок.
Режим : включает или отключает пользовательские страницы ошибок. Он имеет три возможных значения:
defaultRedirect : содержит URL-адрес страницы, отображаемой в случае необработанных ошибок.
Чтобы поместить разные пользовательские страницы ошибок для разных типов ошибок, используются суб-теги <error>, в которых указываются разные страницы ошибок на основе кода состояния ошибок.
Чтобы реализовать обработку ошибок на уровне страницы, директива Page может быть изменена:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="errorhandling._Default" Trace ="true" ErrorPage="PageError.htm" %>
Поскольку отладка ASP.NET сама по себе является важной темой, мы обсудим ее в следующей главе отдельно.