В ASP.NET есть три аспекта обработки исключений:
Трассировка — отслеживание выполнения программы на уровне страницы или уровня приложения.
Обработка ошибок . Обработка стандартных или пользовательских ошибок на уровне страницы или приложения.
Отладка . Продвигайтесь по программе и устанавливайте точки останова для анализа кода.
В этой главе мы обсудим трассировку и обработку. В этой главе мы рассмотрим отладку.
Чтобы понять концепции, создайте следующий пример приложения. Он имеет элемент управления меткой, раскрывающийся список и ссылку. Раскрывающийся список загружает массив котировок, и выбранная цитата будет отображаться в метке ниже. Там также есть гиперссылка, указывающая на несуществующую ссылку.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="errorhandling._Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional// RU" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title> Трассировка, отладка и обработка ошибок </title> </head> <body> <form id= "form1" runat="server"> <div> <asp:Label ID="lblheading" runat="server" Text="Трассировка, отладка и обработка ошибок"> </asp:Label> <br /> <br / > <asp:DropDownList ID="ddlquotes" runat="server" AutoPostBack="True" onselectedindexchanged="ddlquotes_SelectedIndexChanged"> </asp:DropDownList> <br /> <br /> <asp:Label ID="lblquotes" runat= "сервер"> </asp:Label> <br /> <br /> <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="mylink.htm">Ссылка на:</asp:HyperLink> </div> </form> </body></html>
Код после файла:
public частичный класс _Default : System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string[,] quotes = { {"Воображение важнее знаний.", "Альберт Эйнстен"}, {"Примите добродетель, если у вас ее нет" "Шекспир"}, {"Человек не может чувствовать себя комфортно без собственного одобрения", "Марк Твен"}, {"Берегитесь молодого доктора и старого парикмахера", "Бенджамин Франклин"}, {"Все, что началось с гнева, заканчивается позором", "Бенджамин Франклин"} }; for (int i=0; i<quotes.GetLength(0) ); i++) ddlquotes.Items.Add(new ListItem(quotes[i,0], quotes[i,1])); ddlquotes_SelectedIndexChanged(отправитель объекта, 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 и заголовков, за которыми следуют все переменные сервера.
Объекты трассировки позволяют добавлять пользовательскую информацию в выходные данные трассировки. Он имеет два метода для завершения: метод Write и метод Warn.
Измените обработчик событий Page_Load, чтобы обнаружить метод Write:
protected void Page_Load(object sender, EventArgs e){ Trace.Write("Загрузка страницы"); if (!IsPostBack) { Trace.Write("Не отправлять ответ, загрузка страницы"); ............. }}
Запустите, чтобы увидеть эффект:
Чтобы обнаружить метод Warn, давайте внесем некоторый код ошибки в обработчик событий изменения выбранного индекса:
try { int a = 0; int b = 9 / a;} catch (Exception e) { Trace.Warn("UserAction", "обработка 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>
Некоторые из возможных атрибутов: - **Режим:** разрешает или запрещает настраиваемые страницы ошибок. Имеет три возможных значения: - **Вкл.** Отображать пользовательскую страницу. - **Выкл.:** Показывает страницу ошибок ASP.NET (желтая страница). - **remoteOnly:** Отображает клиенту пользовательские ошибки, показывая локальные ошибки ASP.NET. - **defaultRedirect:** содержит URL-адрес страницы, которая будет отображаться в случае неустраненных ошибок. Чтобы разместить разные пользовательские страницы ошибок для разных типов ошибок, используются вложенные теги, в которых указываются разные страницы ошибок на основе кода состояния ошибки. Чтобы добиться разрешения ошибок на уровне страницы, директиву Page можно изменить на: `````` Поскольку отладка ASP.NET является важной темой в ней, мы обсудим ее отдельно в следующей главе.