Учебники

ASP.NET — обработка ошибок

Обработка ошибок в 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 не поддерживается

Под информацией верхнего уровня находится журнал трассировки, в котором содержится подробная информация о жизненном цикле страницы. Он предоставляет время в секундах с момента инициализации страницы.

Трассировка Info2

Следующий раздел — дерево элементов управления, в котором перечислены все элементы управления на странице в иерархическом порядке:

Трассировка Info3

Последние в сводках состояния сеанса и приложения, коллекции файлов 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 = 
      .......................
   }
}

Запустите, чтобы наблюдать за эффектами:

Трассировка Info4

Чтобы проверить метод Warn, давайте принудительно введем некоторый ошибочный код в выбранный обработчик события изменения индекса:

try
{
   int a = 0;
   int b = 9 / a;
}catch (Exception e)
{
   Trace.Warn("UserAction", "processing 9/a", e);
}

Try-Catch — это программная конструкция на C #. Блок try содержит любой код, который может вызвать или не вызвать ошибку, а блок catch перехватывает ошибку. Когда программа запускается, она отправляет предупреждение в журнал трассировки.

Трассировка Info5

Трассировка уровня приложения применяется ко всем страницам веб-сайта. Это реализуется путем помещения следующих строк кода в файл 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 сама по себе является важной темой, мы обсудим ее в следующей главе отдельно.