Отображение страницы пользовательской ошибки (VB)Displaying a Custom Error Page (VB)

по Скотт Митчеллby Scott Mitchell

Скачать код или скачать PDFDownload Code or Download PDF

Что видят пользователи при возникновении ошибки времени выполнения в веб-приложении ASP.NET?What does the user see when a runtime error occurs in an ASP.NET web application? Ответ зависит от того, как конфигурация> <customErrors веб-сайта.The answer depends on how the website's <customErrors> configuration. По умолчанию пользователи показывают невидимый желтый экран о том, что произошла ошибка времени выполнения.By default, users are shown an unsightly yellow screen proclaiming that a runtime error has occurred. В этом учебнике показано, как настроить эти параметры для отображения страницы настраиваемой ошибки визуально, которая соответствует внешнему интерфейсу веб-узла.This tutorial shows how to customize these settings to display an aesthetically-pleasing custom error page that matches your site's look and feel.

ВведениеIntroduction

В идеальном мире ошибки времени выполнения не возникают.In a perfect world there would be no run-time errors. Программисты могут написать код, Нари ошибку и устойчивую проверку вводимых пользователем данных, а внешние ресурсы, такие как серверы баз данных и серверы электронной почты, никогда не переходят в автономный режим.Programmers would write code with nary a bug and with robust user input validation, and external resources like database servers and email servers would never go offline. Разумеется, на практике ошибки неизбежны.Of course, in reality errors are inevitable. Классы в .NET Framework сообщают об ошибке, вызывая исключение.The classes in the .NET Framework signal an error by throwing an exception. Например, вызов метода Open объекта SqlConnection устанавливает соединение с базой данных, указанной в строке подключения.For example, calling a SqlConnection object's Open method establishes a connection to the database specified by a connection string. Однако если база данных не работает или в строке подключения указаны недопустимые учетные данные, метод Open вызывает исключение SqlException.However, if the database is down or if the credentials in the connection string are invalid then the Open method throws a SqlException. Исключения могут обрабатываться с помощью блоков Try/Catch/Finally.Exceptions can be handled by the use of Try/Catch/Finally blocks. Если код в блоке Try вызывает исключение, управление передается соответствующему блоку catch, где разработчик может попытаться устранить ошибку.If code within a Try block throws an exception, control is transferred to the appropriate catch block where the developer can attempt to recover from the error. Если соответствующий блок catch отсутствует или код, вызвавший исключение, находится не в блоке try, то исключение перколатес стек вызовов в поиске блоков Try/Catch/Finally.If there is no matching catch block, or if the code that threw the exception is not in a try block, the exception percolates up the call stack in search of Try/Catch/Finally blocks.

Если исключение восстановится до среды выполнения ASP.NET без обработки, вызывается событиеError классаHttpApplicationи отображается страница настроенной ошибки .If the exception bubbles all the way up to the ASP.NET runtime without being handled, the HttpApplication class's Error event is raised and the configured error page is displayed. По умолчанию ASP.NET отображает страницу ошибки, ласковоую желтым экраном смерти (исод).By default, ASP.NET displays an error page that is affectionately referred to as the Yellow Screen of Death (YSOD). Существует две версии ИСОД: одна показывает сведения об исключении, трассировку стека и другие сведения, полезные для разработчиков при отладке приложения (см. рис. 1); в другом просто говорится об ошибке времени выполнения (см. рис. 2).There are two versions of the YSOD: one shows the exception details, a stack trace, and other information helpful to developers debugging the application (see Figure 1); the other simply states that there was a run-time error (see Figure 2).

Сведения об исключении ИСОД весьма полезны для разработчиков, которые выполняют отладку приложения, но показывают ИСОД для конечных пользователей.The exception details YSOD is quite helpful for developers debugging the application, but showing a YSOD to end users is tacky and unprofessional. Вместо этого конечные пользователи должны быть переведены на страницу ошибки, которая обеспечивает внешний вид и удобство работы узла с более понятными для пользователя prose, описывающими ситуацию.Instead, end users should be taken to an error page that maintains the site's look and feel with more user-friendly prose describing the situation. Хорошая новость состоит в том, что создание такой настраиваемой страницы ошибки довольно просто.The good news is that creating such a custom error page is quite easy. В этом учебнике начинается знакомство с ASP. Различные страницы ошибок NET.This tutorial starts with a look at ASP.NET's different error pages. Затем показано, как настроить веб-приложение таким способом, чтобы пользователи отображали настраиваемую страницу ошибки на лицевой стороне ошибки.It then shows how to configure the web application to show users a custom error page in the face of an error.

Изучение трех типов страниц ошибокExamining the Three Types of Error Pages

При возникновении необработанного исключения в приложении ASP.NET появляется один из трех типов страниц ошибок:When an unhandled exception arises in an ASP.NET application one of three types of error pages is displayed:

  • Желтый экран сведений об исключении на странице ошибки смертиThe Exception Details Yellow Screen of Death error page,
  • Желтый экран ошибки времени выполнения на странице ошибки смерти илиThe Runtime Error Yellow Screen of Death error page, or
  • Настраиваемая страница ошибкиA custom error page

Наиболее знакомыми разработчиками страниц ошибок являются сведения об исключении ИСОД.The error page developers are most familiar with is the Exception Details YSOD. По умолчанию эта страница отображается для пользователей, посещаемых локально, поэтому это страница, отображаемая при возникновении ошибки при тестировании сайта в среде разработки.By default, this page is displayed to users who are visiting locally and therefore is the page that you see when an error occurs when testing the site in the development environment. Как следует из названия, сведения об исключении ИСОД предоставляют подробные сведения об исключении: тип, сообщение и трассировку стека.As its name implies, the Exception Details YSOD provides details about the exception - the type, the message, and the stack trace. Более того, если исключение было вызвано кодом в классе кода программной части страницы ASP.NET и если приложение настроено для отладки, то сведения об исключении ИСОД также будут показывать эту строку кода (и несколько строк кода выше и ниже).What's more, if the exception was raised by code in your ASP.NET page's code-behind class and if the application is configured for debugging then the Exception Details YSOD will also show this line of code (and a few lines of code above and below it).

На рис. 1 показана страница сведений об исключении исод.Figure 1 shows the Exception Details YSOD page. Запишите URL-адрес в окне адреса браузера: http://localhost:62275/Genre.aspx?ID=foo.Note the URL in the browser's address window: http://localhost:62275/Genre.aspx?ID=foo. Помните, что на Genre.aspx странице перечислены обзоры книг в определенном жанре.Recall that the Genre.aspx page lists the book reviews in a particular genre. Для этого требуется, чтобы значение GenreId (uniqueidentifier) передавалось через строку запроса. Например, правильный URL-адрес для просмотра вымышленных проверок Genre.aspx?ID=7683ab5d-4589-4f03-a139-1c26044d0146.It requires that GenreId value (a uniqueidentifier) be passed through the querystring; for example, the appropriate URL to view the fiction reviews is Genre.aspx?ID=7683ab5d-4589-4f03-a139-1c26044d0146. Если значение, отличное отuniqueidentifier, передается через строку запроса (например, "foo"), возникает исключение.If a non-uniqueidentifier value is passed in through the querystring (such as "foo") an exception is thrown.

Note

Чтобы воспроизвести эту ошибку в демонстрационном веб-приложении, доступном для загрузки, можно либо посетить Genre.aspx?ID=foo напрямую, либо щелкнуть ссылку "создать ошибку времени выполнения" в Default.aspx.To reproduce this error in the demo web application available for download you can either visit Genre.aspx?ID=foo directly or click the "Generate a Runtime Error" link in Default.aspx.

Обратите внимание на сведения об исключении, представленные на рис. 1.Note the exception information presented in Figure 1. Сообщение об исключении "не удалось преобразовать строку символов в uniqueidentifier" в верхней части страницы.The exception message, "Conversion failed when converting from a character string to uniqueidentifier" is present at the top of the page. Тип исключения, System.Data.SqlClient.SqlException, также присутствует в списке.The type of the exception, System.Data.SqlClient.SqlException, is listed, as well. Также имеется трассировка стека.There's also the stack trace.

Рис. 1. сведения об исключении Исод содержат сведения о исключенииFigure 1: The Exception Details YSOD Includes Information About the Exception
(Щелкните, чтобы просмотреть изображение с полным размером)(Click to view full-size image)

Другой тип ИСОД — это ошибка времени выполнения ИСОД и показана на рис. 2.The other type of YSOD is the Runtime Error YSOD, and is shown in Figure 2. Ошибка времени выполнения ИСОД информирует посетителя о том, что произошла ошибка времени выполнения, но не содержит сведений о возникшем исключении.The Runtime Error YSOD informs the visitor that a run-time error has occurred, but it does not include any information about the exception that was thrown. (Однако он предоставляет инструкции о том, как сделать сведения об ошибке видимыми, изменив файл Web.config, который является частью того, что делает такую ИСОД непрофессиональной.)(It does, however, provide instructions on how to make the error details viewable by modifying the Web.config file, which is part of what makes such a YSOD look unprofessional.)

По умолчанию ошибка времени выполнения ИСОД отображается для пользователей, посещенных удаленно (через http://www.yoursite.com), как указано URL-адресом в адресной строке браузера на рис. 2: http://httpruntime.web703.discountasp.net/Genre.aspx?ID=foo.By default, the Runtime Error YSOD is shown to users visiting remotely (through http://www.yoursite.com), as evidenced by the URL in the browser's Address bar in Figure 2: http://httpruntime.web703.discountasp.net/Genre.aspx?ID=foo. Существуют два различных экрана ИСОД, так как разработчики заинтересованы в определении сведений об ошибках, но такие сведения не должны отображаться на активном сайте, так как они могут раскрыть потенциальные уязвимости или другие конфиденциальные сведения для всех, кто посещает ваш места.The two different YSOD screens exist because developers are interested in knowing the error details, but such information should not be shown on a live site as it may reveal potential security vulnerabilities or other sensitive information to anyone who visits your site.

Note

Если вы выполняете следующие функции и используете DiscountASP.NET в качестве веб-узла, вы можете заметить, что ошибка времени выполнения ИСОД не отображается при посещении активного сайта.If you are following along and are using DiscountASP.NET as your web host, you may notice that the Runtime Error YSOD does not display when visiting the live site. Это обусловлено тем, что DiscountASP.NET содержит серверы, настроенные на отображение сведений об исключении ИСОД по умолчанию.This is because DiscountASP.NET has their servers configured to show the Exception Details YSOD by default. Хорошая новость заключается в том, что вы можете переопределить это поведение по умолчанию, добавив раздел <customErrors> в файл Web.config.The good news is that you can override this default behavior by adding a <customErrors> section to your Web.config file. Раздел "сведения о настройке отображаемой страницы ошибки" подробно рассматривает раздел <customErrors>.The "Configuring Which Error Page is Displayed" section examines the <customErrors> section in detail.

Рис. 2. ошибка времени выполнения Исод не содержит сведений об ошибкеFigure 2: The Runtime Error YSOD Does Not Include Any Error Details
(Щелкните, чтобы просмотреть изображение с полным размером)(Click to view full-size image)

Третий тип страницы ошибки — настраиваемая страница ошибки, которая представляет собой создаваемую веб-страницу.The third type of error page is the custom error page, which is a web page that you create. Преимущество пользовательской страницы ошибок состоит в том, что вы имеете полный контроль над информацией, отображаемой пользователю вместе с ее внешним видом и поведением. страница настраиваемой ошибки может использовать ту же главную страницу и стили, что и другие страницы.The benefit of a custom error page is that you have complete control over the information that is displayed to the user along with the page's look and feel; the custom error page can use the same master page and styles as your other pages. Раздел "Использование настраиваемой страницы ошибки" содержит инструкции по созданию настраиваемой страницы ошибок и ее настройке для вывода в случае необработанного исключения.The "Using a Custom Error Page" section walks through creating a custom error page and configuring it to display in the event of an unhandled exception. На рис. 3 приведен краткий пик этой настраиваемой страницы ошибок.Figure 3 offers a sneak peak of this custom error page. Как видите, страница ошибки выглядит гораздо более профессионально, чем один из желтых экранов смерти, показанных на рис. 1 и 2.As you can see, the look and feel of the error page is much more professional-looking than either of the Yellow Screens of Death shown in Figures 1 and 2.

Рис. 3. настраиваемая страница ошибки предлагает более специализированный внешний вид и оформлениеFigure 3: A Custom Error Page Offers a More Tailored Look and Feel
(Щелкните, чтобы просмотреть изображение с полным размером)(Click to view full-size image)

Уделите время изучению адресной строки браузера на рис. 3.Take a moment to inspect the browser's Address bar in Figure 3. Обратите внимание, что в адресной строке отображается URL-адрес страницы настраиваемой ошибки (/ErrorPages/Oops.aspx).Note that the Address bar shows the URL of the custom error page (/ErrorPages/Oops.aspx). На рис. 1 и 2 желтые экраны смерти отображаются на той же странице, на которой возникла ошибка (Genre.aspx).In Figures 1 and 2 the Yellow Screens of Death are shown in the same page that the error originated from (Genre.aspx). На странице настраиваемой ошибки передается URL-адрес страницы, на которой произошла ошибка, с помощью параметра aspxerrorpath QueryString.The custom error page is passed the URL of the page where the error occurred via the aspxerrorpath querystring parameter.

Настройка отображаемой страницы ошибокConfiguring Which Error Page is Displayed

Какая из трех возможных страниц ошибок отображается на основе двух переменных:Which of the three possible error pages is displayed is based on two variables:

  • Сведения о конфигурации в разделе <customErrors> иThe configuration information in the <customErrors> section, and
  • Будет ли пользователь посещать сайт локально или удаленно.Whether the user is visiting the site locally or remotely.

Раздел<customErrors> в Web.config имеет два атрибута, которые влияют на отображаемую страницу ошибки: defaultRedirect и mode.The <customErrors> section in Web.config has two attributes that affect what error page is shown: defaultRedirect and mode. Атрибут defaultRedirect является необязательным.The defaultRedirect attribute is optional. Если он указан, он указывает URL-адрес страницы настраиваемой ошибки и указывает, что вместо ошибки времени выполнения ИСОД должна отображаться пользовательская страница ошибки.If provided, it specifies the URL of the custom error page and indicates that the custom error page should be shown instead of the Runtime Error YSOD. Атрибут mode является обязательным и принимает одно из трех значений: On, Offили RemoteOnly.The mode attribute is required and accepts one of three values: On, Off, or RemoteOnly. Эти значения имеют следующие особенности.These values have the following behavior:

  • On — указывает, что пользовательская страница ошибок или ошибка времени выполнения ИСОД отображаться для всех посетителей независимо от того, являются они локальными или удаленными.On - indicates that the custom error page or the Runtime Error YSOD is shown to all visitors, regardless of whether they are local or remote.
  • Off — указывает, что сведения об исключении отображаются для всех посетителей, независимо от того, являются они локальными или удаленными.Off - specifies that the Exception Details YSOD is displayed to all visitors, regardless of whether they are local or remote.
  • RemoteOnly — указывает, что пользовательская страница ошибок или ошибка времени выполнения ИСОД отображается удаленным посетителям, а сведения об исключении ИСОД — локальным посетителям.RemoteOnly - indicates that the custom error page or the Runtime Error YSOD is shown to remote visitors, while the Exception Details YSOD is shown to local visitors.

Если не указано иное, ASP.NET действует так, как если бы вы установили атрибут mode в RemoteOnly и не указали defaultRedirect значение.Unless you specify otherwise, ASP.NET acts as if you had set the mode attribute to RemoteOnly and had not specified a defaultRedirect value. Иными словами, поведение по умолчанию заключается в том, что сведения об исключении ИСОД отображаются локальным посетителям, а ошибка времени выполнения ИСОД отображается для удаленных посетителей.In other words, the default behavior is that the Exception Details YSOD is displayed to local visitors while the Runtime Error YSOD is shown to remote visitors. Это поведение по умолчанию можно переопределить, добавив <customErrors> раздел в Web.config file. веб-приложения.You can override this default behavior by adding a <customErrors> section to your web application's Web.config file.

Использование настраиваемой страницы ошибокUsing a Custom Error Page

У каждого веб-приложения должна быть настраиваемая страница ошибки.Every web application should have a custom error page. Она предоставляет более профессионально выглядящий альтернативу ошибке времени выполнения ИСОД, легко создавать и настраивать приложение для использования настраиваемой страницы ошибок занимает всего несколько секунд.It provides a more professional-looking alternative to the Runtime Error YSOD, it is easy to create, and configuring the application to use the custom error page takes only a few moments. Первым шагом является создание настраиваемой страницы ошибок.The first step is creating the custom error page. Я добавил новую папку в приложение для рецензирования книги с именем ErrorPages и добавил к этой новой странице ASP.NET с именем Oops.aspx.I've added a new folder to the Book Reviews application named ErrorPages and added to that a new ASP.NET page named Oops.aspx. Убедитесь, что страница использует ту же главную страницу, что и остальные страницы на сайте, чтобы он автоматически наследовал тот же внешний вид и поведение.Have the page use the same master page as the rest of the pages on your site so that it automatically inherits the same look and feel.

Рис. 4. Создание настраиваемой страницы ошибокFigure 4: Create a Custom Error Page

Затем натратьте несколько минут на создание содержимого для страницы ошибки.Next, spend a few minutes creating the content for the error page. Я создал простую настраиваемую страницу ошибки с сообщением, указывающим, что произошла непредвиденная ошибка, и обратная ссылка на домашнюю страницу сайта.I've created a rather simple custom error page with a message indicating that there was an unexpected error and a link back to the site's homepage.

Рис. 5. Проектирование пользовательской страницы ошибокFigure 5: Design Your Custom Error Page
(Щелкните, чтобы просмотреть изображение с полным размером)(Click to view full-size image)

После завершения страницы ошибки настройте веб-приложение на использование настраиваемой страницы ошибок вместо ошибки времени выполнения ИСОД.With the error page completed, configure the web application to use the custom error page in lieu of the Runtime Error YSOD. Это достигается путем указания URL-адреса страницы ошибки в атрибуте defaultRedirect раздела <customErrors>.This is accomplished by specifying the URL of the error page in the <customErrors> section's defaultRedirect attribute. Добавьте следующую разметку в файл Web.config приложения:Add the following markup to your application's Web.config file:

<configuration>
    ...

    <system.web>
        <customErrors mode="RemoteOnly"
                      defaultRedirect="~/ErrorPages/Oops.aspx" />

        ...
    </system.web>
</configuration>

Приведенная выше разметка настраивает приложение для отображения сведений об исключении ИСОД пользователям, посещенным локально, при использовании пользовательской страницы ошибки ой. aspx для пользователей, посещенных удаленно.The above markup configures the application to show the Exception Details YSOD to users visiting locally, while using the custom error page Oops.aspx for those users visiting remotely. Чтобы увидеть это в действии, разверните веб-сайт в рабочей среде, а затем посетите страницу жанр. aspx на активном сайте с недопустимым значением строки запроса.To see this in action, deploy your website to the production environment and then visit the Genre.aspx page on the live site with an invalid querystring value. Вы увидите страницу настраиваемой ошибки (см. рис. 3).You should see the custom error page (refer back to Figure 3).

Чтобы убедиться, что пользовательская страница ошибки отображается только для удаленных пользователей, перейдите на страницу Genre.aspx с неверной строкой запроса из среды разработки.To verify that the custom error page is only shown to remote users, visit the Genre.aspx page with an invalid querystring from the development environment. Вы по-прежнему увидите сведения об исключении ИСОД (см. рис. 1).You should still see the Exception Details YSOD (refer back to Figure 1). Параметр RemoteOnly гарантирует, что пользователи, посещающие сайт в рабочей среде, видят страницу настраиваемой ошибки, а разработчики, работающие локально, продолжают видеть сведения об исключении.The RemoteOnly setting ensures that users visiting the site on the production environment see the custom error page while developers working locally continue to see the details of the exception.

Уведомление разработчиков и запись сведений об ошибкахNotifying Developers and Logging Error Details

Ошибки, возникающие в среде разработки, были вызваны разработчиком на компьютере.Errors that occur in the development environment were caused by the developer sitting at her computer. Она показывает сведения об исключении в сведениях об исключении ИСОД и знает, какие шаги она выполняла в момент возникновения ошибки.She is shown the exception's information in the Exception Details YSOD, and she knows what steps she was performing when the error occurred. Но при возникновении ошибки в рабочей среде разработчик не имеет сведений о том, что произошла ошибка, если пользователь, посещающий сайт, не потратит время на сообщение об ошибке.But when an error occurs on production, the developer has no knowledge that an error occurred unless the end user visiting the site takes the time to report the error. Даже если пользователь выходит из строя, чтобы предупредить команду разработчиков о том, что произошла ошибка, не зная тип исключения, сообщение и трассировку стека, это может быть трудно диагностировать причину ошибки, разрешить отдельно исправить ее.And even if the user goes out of his way to alert the development team that an error occurred, without knowing the exception type, message, and stack trace it can be difficult to diagnose the cause of the error, let alone fix it.

По этим причинам важно, чтобы любая ошибка в рабочей среде записалась в какое-либо постоянное хранилище (например, в базу данных) и что разработчики предупреждают об этой ошибке.For these reasons it is paramount that any error in the production environment is logged to some persistent store (such as a database) and that the developers are alerted of this error. Страница настраиваемой ошибки может показаться хорошим местом для ведения журнала и уведомления.The custom error page may seem like a good place to do this logging and notification. К сожалению, настраиваемая страница ошибки не имеет доступа к сведениям об ошибке и поэтому не может использоваться для записи этих сведений в журнал.Unfortunately, the custom error page does not have access to the error details and therefore cannot be used to log this information. Хорошая новость состоит в том, что существует несколько способов перехвата сведений об ошибке и их записи в журнал, а в следующих трех руководствах подробно рассматривается этот раздел.The good news is that there are a number of ways to intercept the error details and to log them, and the next three tutorials explore this topic in more detail.

Использование различных настраиваемых страниц ошибок для различных состояний ошибок HTTPUsing Different Custom Error Pages for Different HTTP Error Statuses

Если исключение вызывается страницей ASP.NET и не обрабатывается, исключение перколатес до среды выполнения ASP.NET, которая отображает настроенную страницу ошибки.When an exception is thrown by an ASP.NET page and is not handled, the exception percolates up to the ASP.NET runtime, which displays the configured error page. Если запрос поступает в подсистему ASP.NET Engine, но не может быть обработан по какой-либо причине, возможно, запрошенный файл не найден или для него отключены разрешения на чтение. Затем обработчик ASP.NET создает HttpException.If a request comes into the ASP.NET engine but cannot be processed for some reason - perhaps the requested file is not found or Read permissions have been disabled for the file - then the ASP.NET engine raises an HttpException. Это исключение, например исключения, возникающие на страницах ASP.NET, передается в среду выполнения, что приводит к отображению соответствующей страницы ошибки.This exception, like exceptions raised from ASP.NET pages, bubbles up to the runtime, causing the appropriate error page to be displayed.

Это означает, что для веб-приложения в рабочей среде, если пользователь запрашивает страницу, которая не найдена, он увидит страницу настраиваемой ошибки.What this means for the web application in production is that if a user requests a page that is not found then they will see the custom error page. На рис. 6 показан пример.Figure 6 shows such an example. Поскольку запрос предназначен для несуществующей страницы (NoSuchPage.aspx), создается HttpException и отображается страница настраиваемой ошибки (Обратите внимание на ссылку на NoSuchPage.aspx в параметре строки запроса aspxerrorpath).Because the request is for a non-existent page (NoSuchPage.aspx), an HttpException is thrown and the custom error page is displayed (note the reference to NoSuchPage.aspx in the aspxerrorpath querystring parameter).

рис. 6. Среда выполнения ASP.NET отображает настроенную страницу ошибки в ответ на недопустимый запрос.Figure 6: The ASP.NET Runtime Displays the Configured Error Page In Response to an Invalid Request
(Щелкните, чтобы просмотреть изображение с полным размером)(Click to view full-size image)

По умолчанию все типы ошибок приводят к отображению одной и той же настраиваемой страницы ошибок.By default, all types of errors cause the same custom error page to be displayed. Однако можно указать другую настраиваемую страницу ошибки для конкретного кода состояния HTTP с помощью <error> дочерних элементов в разделе <customErrors>.However, you can specify a different custom error page for a specific HTTP status code using <error> children elements within the <customErrors> section. Например, чтобы страница ошибки отображалась в случае ошибки «страница не найдена» с кодом состояния HTTP 404, обновите раздел <customErrors>, включив в него следующую разметку:For example, to have a different error page displayed in the event of a page not found error, which has an HTTP status code of 404, update the <customErrors> section to include the following markup:

<customErrors mode="RemoteOnly" defaultRedirect="~/ErrorPages/Oops.aspx">
    <error statusCode="404" redirect="~/ErrorPages/404.aspx" />
</customErrors>

После этого изменения, когда пользователь посещает удаленно запрашивает несуществующий ресурс ASP.NET, он будет перенаправлен на 404.aspx настраиваемую страницу ошибок вместо Oops.aspx.With this change in place, whenever a user visiting remotely requests an ASP.NET resource that does not exist, they will be redirected to the 404.aspx custom error page instead of Oops.aspx. Как показано на рис. 7 , страница 404.aspx может содержать более конкретное сообщение, чем общая пользовательская страница ошибки.As Figure 7 illustrates, the 404.aspx page can include a more specific message than the general custom error page.

Note

Дополнительные сведения о создании эффективных 404 страниц ошибок см. на страницах ошибок 404 .Check out 404 Error Pages, One More Time for guidance on creating effective 404 error pages.

рис. 7. на странице настраиваемой ошибки 404 отображается более целевое сообщение, чем Oops.aspxFigure 7: The Custom 404 Error Page Displays a More Targeted Message Than Oops.aspx
(Щелкните, чтобы просмотреть изображение с полным размером)(Click to view full-size image)

Так как известно, что страница 404.aspx достижима только тогда, когда пользователь выполняет запрос к странице, которая не была найдена, можно улучшить эту настраиваемую страницу ошибки, включив в нее функции, помогающие пользователю устранить эту ошибку конкретного типа.Because you know that the 404.aspx page is only reached when the user makes a request for a page that was not found, you can enhance this custom error page to include functionality to help the user address this specific type of error. Например, можно создать таблицу базы данных, которая сопоставляет известные неправильные URL-адреса с хорошими URL-адресами, а затем попросит 404.aspx настраиваемой страницы ошибок выполнить запрос к этой таблице и предложить страницы, к которым пользователь может обратиться.For example, you could build a database table that maps known bad URLs to good URLs, and then have the 404.aspx custom error page run a query against that table and suggest pages the user may be trying to reach.

Note

Страница настраиваемой ошибки отображается только при выполнении запроса к ресурсу, обрабатываемому ядром ASP.NET.The custom error page is only displayed when a request is made to a resource handled by the ASP.NET engine. Как обсуждалось в основных различиях между IIS и ASP.NET Development Serverным руководством, веб-сервер может выполнять определенные запросы.As we discussed in the Core Differences Between IIS and the ASP.NET Development Server tutorial, the web server may handle certain requests itself. По умолчанию веб-сервер IIS обрабатывает запросы на статическое содержимое, например изображения и HTML-файлы, без вызова подсистемы ASP.NET.By default, the IIS web server processes requests for static content like images and HTML files without invoking the ASP.NET engine. Следовательно, если пользователь запрашивает несуществующий файл изображения, он получит сообщение об ошибке по умолчанию 404 IIS, а не ASP. NET — настроенная страница ошибки.Consequently, if the user requests a non-existent image file they will get back IIS's default 404 error message rather than ASP.NET's configured error page.

СводкаSummary

Когда в приложении ASP.NET возникает необработанное исключение, пользователь показывает одну из трех страниц ошибок: желтой экран сведений об исключении. Желтый экран ошибки времени выполнения. или настраиваемую страницу ошибки.When an unhandled exception occurs in an ASP.NET application, the user is shown one of three error pages: the Exception Details Yellow Screen of Death; the Runtime Error Yellow Screen of Death; or a custom error page. Отображаемая страница ошибки зависит от конфигурации <customErrors> приложения и от того, посещает пользователь локально или удаленно.Which error page is displayed depends on the application's <customErrors> configuration and whether the user is visiting locally or remotely. Поведение по умолчанию — показывать сведения об исключении ИСОД локальным посетителям, а ошибка времени выполнения ИСОД удаленным посетителям.The default behavior is to show the Exception Details YSOD to local visitors and the Runtime Error YSOD to remote visitors.

Несмотря на то, что ошибка времени выполнения ИСОД скрывает потенциально конфиденциальную информацию об ошибках от пользователя, который посещает сайт, она нарушает внешний вид веб-узла и делает приложение ошибками.While the Runtime Error YSOD hides potentially sensitive error information from the user visiting the site, it breaks from your site's look and feel and makes your application look buggy. Лучшим подходом является использование настраиваемой страницы ошибок, которая включает создание и проектирование пользовательской страницы ошибок и указание ее URL-адреса в атрибуте defaultRedirect раздела <customErrors>.A better approach is to use a custom error page, which entails creating and designing the custom error page and specifying its URL in the <customErrors> section's defaultRedirect attribute. Можно даже иметь несколько настраиваемых страниц ошибок для различных состояний ошибок HTTP.You can even have multiple custom error pages for different HTTP error statuses.

Страница настраиваемой ошибки является первым шагом в комплексной стратегии обработки ошибок для веб-сайта в рабочей среде.The custom error page is the first step in a comprehensive error handling strategy for a website in production. Также важны важные шаги для разработчика ошибки и ведения журнала.Alerting the developer of the error and logging its details are also important steps. В следующих трех руководствах рассматриваются методы уведомления об ошибках и ведения журнала.The next three tutorials explore techniques for error notification and logging.

Поздравляем с программированием!Happy Programming!

Дополнительные материалыFurther Reading

Дополнительные сведения о разделах, обсуждаемых в этом руководстве, см. в следующих ресурсах:For more information on the topics discussed in this tutorial, refer to the following resources: