Создание пользовательских ошибок страниц в ASP.NET с помощью Visual C# .NET

Переводы статьи Переводы статьи
Код статьи: 306355 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Аннотация

В данной статье описывается использование кода .NET Visual C# ловушки и реагировать на ошибки при их возникновении в ASP.NET. ASP.NET Улучшение параметров из традиционных Microsoft ASP (ASP) обработки ошибок. В ASP.NET в приложениях можно обрабатывать ошибки на нескольких различных уровнях.

Новые возможности в ASP.NET

ASP.NET предоставляет несколько достижений в как можно обрабатывать и реагировать на ошибки. В традиционных ASP обработки ошибок с помощью «On Error Resume Next» (или блоки try-catch в JScript). Кроме того при запуске службы Microsoft IIS (IIS) 5.0, использовать объект ASPError для создания страницы отчетов об ошибках. Тем не менее эти подходы имеют свои ограничения.

ASP.NET предоставляет несколько уровней, на которых можно обработать и реагировать на ошибки, возникающие при запуске приложения ASP.NET. ASP.NET предоставляет три основных метода, позволяющие отслеживать и реагировать на ошибки при их возникновении: Page_ErrorApplication_Errorи файл конфигурации приложения (Web.config).

В этой статье показано, как использовать эти новые функции в приложении ASP.NET. Не смотя на то, что эта статья описывает, как предоставить пользовательские страницы ошибок и общие сообщения об ошибках по отношению к ASP.NET, в этой статье не описаны другие подходы обработки ошибок, такие как блок try-catch-finally и системы исключения общеязыковой среды выполнения (CLR) ошибок.

Как использовать метод Page_Error

Обработчик события Page_Error позволяет отслеживать ошибки, которые происходят на уровне страницы. Сведения об ошибке можно просто отобразить (как это делает образец кода для выполнения), или можно регистрировать событие или выполнять другие действия.

Примечание В этом примере отображаются подробные сведения об ошибке в браузере только для демонстрационных целей. Необходимо соблюдать осторожность при отображении подробных сведений для пользователя приложения, особенно в том случае, если приложение выполняется в Интернете. Для отображения сообщения пользователю уведомлением, произошла ошибка и фактически регистрации сведения о данной ошибке в журнале событий будет более соответствующее действие.

В этом примере исключение null, благодаря чему произошла ошибка в обработчике событий Page_Load . Выполните следующие действия, чтобы создать начальную страницу, демонстрируется использование обработчика события Page_Error .
  1. Выполните следующие действия, чтобы добавить новый файл с именем PageEvent.aspxto в проект.
    1. Откройте Microsoft Visual Studio .NET.
    2. В обозревателе решений щелкните правой кнопкой мыши узел проекта, выберите команду Добавитьи выберите команду Добавить веб-форму.
    3. В поле имя введите PageEvent.aspx, а затем нажмите кнопку Открыть.
  2. Добавьте следующий код к PageEvent.aspx:
    <script language=C# runat="server">
    void Page_Load(object sender, System.EventArgs e)
    {
    	throw(new ArgumentNullException());
    }
    
    public void Page_Error(object sender,EventArgs e)
    {
    	Exception objErr = Server.GetLastError().GetBaseException();
    	string err =	"<b>Error Caught in Page_Error event</b><hr><br>" + 
    			"<br><b>Error in: </b>" + Request.Url.ToString() +
    			"<br><b>Error Message: </b>" + objErr.Message.ToString()+
    			"<br><b>Stack Trace:</b><br>" + 
    	                  objErr.StackTrace.ToString();
    	Response.Write(err.ToString());
    	Server.ClearError();
    }
    </script> 
    					

    Примечание В этом примере кода атрибута AutoEventWireup не задано явно. В противном случае явно не assigna значение атрибута AutoEventWireup используется по умолчанию значение true . При использовании Visual Studio .NET для разработки yourapplications код шаблона веб-форма явно устанавливает значение атрибута AutoEventWireup значение false. Имеется существенное различие между использует thatASP.NET значение по умолчанию, и значение по умолчанию, codeassigns шаблона Visual Studio .NET для этого атрибута. Если значение атрибута AutoEventWireup имеет значение false, обработчики событий, объявленных в.Notfire сделать страницы ASPX. Это может быть запутанным, если вы не знаете о thisfunctionality.
  3. В меню файл выберите Сохранить PageEvent.aspx.
  4. Щелкните правой кнопкой мыши страницу и выберите команду просмотреть в обозревателе для запуска страницы. Обратите внимание, что выдается сообщение об ошибке и reportedaccording код спецификации.
Примечание Вы можете заметить, что код выдает вызов Server.ClearError. Это предотвращает ошибки до обработчика событий Application_Error .

Кроме того вы должны принять во внимание атрибут Inherits в директиве @ Page . Если значение Inherits , необходимо построить проект, прежде чем перейти к странице. Если сначала не построить проект, появляется следующее сообщение об ошибке:
«Project.PageEvent» не является допустимым типом

Как с помощью метода Application_Error

Как м обработчик событий Page_Error, можно использовать обработчик событий Application_Error для перехвата ошибок, возникающих в приложении. Из-за область событий уровня приложения можно вести журнал сведений об ошибках приложения или обрабатывать другие ошибки уровня приложения, которые могут возникнуть.

Образец следовать основан на предыдущем примере Page_Error и бы возникает в том случае, если ошибка в Page_Load был не перехватывается в обработчике события Page_Error . Обработчик событий Application_Error указывается в файле Global.asax приложения. Для простоты описанных в данном разделе создайте новую страницу для исключения, перехвата ошибки в обработчике событий Application_Error файла Global.asax и записать ошибку в журнал событий. Следующие шаги демонстрируют, как использовать метод Application_Error :
  1. Добавьте новый файл с именем AppEvent.aspx Ваш_проект.
  2. Добавьте следующий код к AppEvent.aspx:
    <script language=C# runat="server">
    	void Page_Load(object sender, System.EventArgs e)
    	{
    		throw(new ArgumentNullException());
    	}
    </script>
    					

    Примечание Сведения, описанные в разделе "Page_Error" о атрибута AutoEventWireup также применимы к образец кода на этом шаге. Theinformation в разделе «Page_Error» Дополнительные сведения содержатся в разделе.
  3. В меню файл выберите Сохранить AppEvent.aspx.
  4. Добавьте обработчик событий Application_Error в файл Global.asax для перехвата ошибок, youthrow в обработчике событий Page_Load страницы AppEvent.aspx. Обратите внимание, что следует оператор using addanother пространство имен System.Diagnostics для Global.asax для использования журнала событий.

    Добавьте в файл Global.asax код экран:
    using System.Diagnostics;
    
    protected void Application_Error(object sender, EventArgs e)
    {
    	Exception objErr = Server.GetLastError().GetBaseException();
    	string err =	"Error Caught in Application_Error event\n" +
    			"Error in: " + Request.Url.ToString() +
    			"\nError Message:" + objErr.Message.ToString()+ 
    			"\nStack Trace:" + objErr.StackTrace.ToString();
    	EventLog.WriteEntry("Sample_WebApp",err,EventLogEntryType.Error);
    	Server.ClearError();
    	//additional actions...
    } 
    					
  5. Сохраните файл Global.asax.
  6. В Visual Studio .NET выберите в меню Построение выберите команду Построить.
  7. Щелкните правой кнопкой мыши страницу и выберите команду Просмотр в обозревателе. В этом случае страница будет пустым, однако следует noticethat, добавлена новая запись в журнале событий. В этом примере делает запись в журнал приложений, который доступен из средства просмотра событий. После loggingthe ошибки может потребоваться перенаправить пользователя на другую страницу дополнительные friendlyerror пользователя или выполнить некоторые дополнительные действия при необходимости.

Использование файла Web.config

Если вы не вызываете Server.ClearError или ловушки ошибку в Page_Error или обработчик событий Application_Error , ошибка обрабатывается на основе параметров в разделе <customErrors>файла Web.config. В разделе <customErrors>можно указать страницу переадресации в качестве стандартной страницы ошибок (defaultRedirect) или указать код ошибки HTTP, возникающее на основании определенной страницы. Этот метод можно использовать для настройки, пользователь получает сообщение об ошибке.

При возникновении ошибки, которое не перехватывается в любой из предыдущих уровней в приложении, этот пользовательский экран. В этом разделе показано, как изменить файл Global.asax, таким образом, Server.ClearError никогда не вызывается. В результате эта ошибка обрабатывается как последнюю точку для перехвата ошибок в файле Web.config. </customErrors></customErrors>
  1. Откройте файл Global.asax из previousexample.
  2. Закомментируйте строку Server.ClearError , чтобы убедиться, что ошибка поверхностей в Web.configfile.
  3. Сохраните изменения Global.asax. Код должен nowappear следующим образом:
    using System.Diagnostics;
    
    protected void Application_Error(object sender, EventArgs e)
    {
    	Exception objErr = Server.GetLastError().GetBaseException();
    	string err =	"Error Caught in Application_Error event\n" +
    			"Error in: " + Request.Url.ToString() +
    			"\nError Message:" + objErr.Message.ToString() + 
    			"\nStack Trace:" + objErr.StackTrace.ToString();
    	EventLog.WriteEntry("Sample_WebApp",err,EventLogEntryType.Error);
    	//Server.ClearError();
    	//additional actions...
    } 
    					
  4. Добавьте следующий код в <customErrors>sectionto перенаправить пользователя на настраиваемую страницу:<b00> </b00> </customErrors>
    <customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On">
    </customErrors>
    						
    Примечание Необходимо изменить путь к файлу в атрибуте defaultRedirect , чтобы оно ссылалось соответствующих имен веб-серверов andapplication.
  5. Из-за ошибок, которые содержатся на этом уровне sentto страницу ошибки по умолчанию, необходимо создать страницу ошибок с именем ErrorStatus.htm.Keep в виду, что этот метод используется для управления реальную альтернативному, так что в этом примере использует страницу .htm для страницы ошибки. Добавьте followingcode ErrorStatus.htm:
    <HTML>
    <HEAD>
    <TITLE></TITLE>
    <META NAME="GENERATOR" Content="Microsoft Visual Studio 7.0">
    </HEAD>
    <BODY>
         <b>Custom Error page!</b>
         <br>
         You have been redirected here from the <customErrors> section of the 
         Web.config file.
    </BODY>
    </HTML>
    					
  6. Чтобы протестировать код, сохраните файлы, построения проекта, andthen Просмотр AppEvent.aspx в веб-обозревателе. Обратите внимание, что при генерации ошибки, вы будете перенаправлены на страницу ErrorStatus.htm.
Несмотря на то, что можно ссылаться на страницу ошибки по умолчанию в значение атрибута defaultRedirect в разделе <customErrors>, можно также указать определенную страницу для перенаправления на основании возникает код ошибки HTTP. Этот параметр позволяет дочерний элемент <error>. Например:<b00> </b00> </error> </customErrors>
<customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On">
	<error statusCode="404" redirect="filenotfound.htm" />
</customErrors>
				
Примечание Страницы, указанные в defaultRedirect раздела <customErrors>получается файл .htm. I

Обратите внимание, что раздел <customErrors>содержит атрибут mode , который имеет значение On. Атрибут mode используется для управления тем, как выполняется перенаправление ошибки. Например при разработке приложения, вы скорее всего требуется просмотреть фактические сообщения об ошибках ASP.NET и не нужно быть перенаправлена на более понятные пользователю страницу ошибки. Атрибут режима включает в себя следующие параметры: </customErrors></customErrors>
  • В: необработанные исключения перенаправление пользователя на страницу указанного defaultRedirect . Этот режим используется главным образом в производстве.
  • Отключение: пользователи получают сведения об исключении и являются страницы defaultRedirect не redirectedto. Этот режим используется главным образом при разработке.
  • RemoteOnly: только пользователи обращаются к веб-узлу на локальном компьютере (по usinglocalhost) получают сведения об исключении. Все остальные пользователи перенаправляются на страницу defaultRedirect . Этот режим используется главным образом для отладки.

Устранение неполадок

В его установки по умолчанию в Microsoft Windows 2000 и Microsoft Windows XP ASP.NET выполняет кода веб-приложения в рабочий процесс. Удостоверение процесса непривилегированной учетной записи локальной называется учетной записи ASPNET по умолчанию. В бета-версиях ASP.NET удостоверение процесса было системы, мощной административной учетной записью с правами многие на компьютере.

В его установки по умолчанию в Windows Server 2003 (в IIS 6) ASP.NET выполняет кода веб-приложения в рабочий процесс. По умолчанию удостоверение процесса ограниченную учетную запись с именем учетной записи NetworkService.

Дополнительные сведения о данное изменение, и как оно влияет, выполняется код в этой статье и другой код, могут потребоваться дополнительные права посетите следующие веб-узлы:
Версия 1 изменения системы безопасности для Microsoft платформа.NET Framework
http://msdn2.Microsoft.com/en-us/library/ms994923.aspx

Ссылки

Для получения дополнительных сведений посетите следующие веб-сайты корпорации Майкрософт:
Управление исключениями в .NET

Метод HttpServerUtility.ClearError

Центр разработчиков MSDN .NET

Домашняя страница Microsoft .NET

Свойства

Код статьи: 306355 - Последний отзыв: 29 октября 2013 г. - Revision: 5.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft ASP.NET 1.0
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft ASP.NET 1.1
  • Microsoft Visual C# .NET 2003 Standard Edition
Ключевые слова: 
kbconfig kbhowtomaster kbweb kbmt KB306355 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Данная статья переведена с использованием программного обеспечения Майкрософт для машинного перевода и, возможно, отредактирована посредством технологии Community Translation Framework (CTF). Корпорация Майкрософт предлагает вам статьи, обработанные средствами машинного перевода, отредактированные членами сообщества Майкрософт и переведенные профессиональными переводчиками, чтобы вы могли ознакомиться со всеми статьями нашей базы знаний на нескольких языках. Статьи, переведенные с использованием средств машинного перевода и отредактированные сообществом, могут содержать смысловое, синтаксические и (или) грамматические ошибки. Корпорация Майкрософт не несет ответственности за любые неточности, ошибки или ущерб, вызванные неправильным переводом контента или его использованием нашими клиентами. Подробнее об CTF можно узнать по адресу http://support.microsoft.com/gp/machine-translation-corrections/ru.
Эта статья на английском языке: 306355

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com