Erstellen Sie benutzerdefinierte Fehlerberichterstattung Seiten in ASP.NET mit Visual C# .NET

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 306355 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel wurde zuvor veröffentlicht unter D306355
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

Dieser Artikel beschreibt, wie mit Visual C# .NET Code abgefangen und behandelt Fehler treten in ASP.NET. ASP.NET wurde verbessert, die Fehlerbehandlungsoptionen von traditionellen Microsoft Active Server Pages (ASP). In ASP.NET verwenden können Sie in Ihren Anwendungen Fehler auf verschiedenen Ebenen behandeln.

Neue Features in ASP.NET

ASP.NET bietet mehrere Erweiterungen wie Sie behandeln und Behebung von Fehlern. Im herkömmlichen ASP behandeln Sie Fehler mit "On Error Resume Next" (oder Try-Catch -Blöcken in JScript). Auch wenn Sie Microsoft-Internetinformationsdienste (IIS) 5.0 ausführen, verwenden Sie das ASPError -Objekt zu einer benutzerdefinierten Fehlerberichterstattungsseite. Diese Ansätze haben jedoch ihre Grenzen.

ASP.NET bietet mehrere Ebenen, an denen Sie behandeln und Behebung von Fehlern, die beim Ausführen einer Anwendung ASP.NET auftreten können. ASP.NET bietet drei Hauptmethoden, mit denen Sie abgefangen und behandelt Fehler bei deren auftreten: Page_ErrorApplication_Errorund der Anwendungskonfigurationsdatei (Web.config).

Dieser Artikel beschreibt, wie Sie diese neuen Features in Ihrer Anwendung ASP.NET. Zwar dieser Artikel beschreibt, wie benutzerdefinierte Fehlerseiten und die allgemeine Fehlerberichterstattung in Bezug auf ASP.NET direkt bereitgestellt, beschreibt dieser Artikel nicht andere Ansätze wie die Try-Catch-finally -Block und das Ausnahmesystem Common Language Runtime (CLR) zur Fehlerbehandlung.

Verwendung die Page_Error-Methode

Der Ereignishandler Page_Error bietet können Sie Fehler auffangen, die auf Seitenebene auftreten. Sie können Fehlerinformationen einfach anzeigen (wie der folgende Beispielcode tut), oder Sie können das Ereignis protokollieren oder eine andere Aktion ausführen.

Hinweis In diesem Beispiel zeigt detaillierte Fehlerinformationen im Browser nur zu Demonstrationszwecken. Sie sollten vorsichtig sein, wenn dem Benutzer der Anwendung, Detailinformationen anzeigen, insbesondere dann, wenn die Anwendung im Internet ausgeführt wird. Eine Aktion besser geeignete wäre, eine Meldung an den Benutzer zu benachrichtigen, die ein Fehler aufgetreten ist und tatsächlich die spezifischen Fehlerdetails protokollieren, im Ereignisprotokoll angezeigt.

Dieses Beispiel löst eine Nullausnahme erzwingt einen Fehler im Page_Load -Ereignishandler. Gehen folgendermaßen Sie vor, um die Startseite zu erstellen, die mit dem Ereignishandler Page_Error zeigen wird.
  1. Gehen folgendermaßen Sie vor, um eine neue Datei mit dem Namen PageEvent.aspxto Projekt hinzuzufügen:
    1. Öffnen Sie Microsoft Visual Studio .NET.
    2. Im Projektmappen-Explorer mit der rechten Maustaste des Projektknoten, zeigen Sie auf Hinzufügen, und klicken Sie dann auf Web Form hinzufügen.
    3. Geben Sie in das Textfeld NamePageEvent.aspx, und klicken Sie dann auf Öffnen.
  2. Fügen Sie den folgenden Code zu PageEvent.aspx hinzu:
    <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> 
    					

    Hinweis In diesem Codebeispiel wird das AutoEventWireup -Attribut nicht explizit festgelegt werden. Wenn Sie Assigna-Wert, der das AutoEventWireup -Attribut nicht ausdrücklich angeben, wird der standardmäßige Wert, true verwendet. Wenn Sie Visual Studio .NET entwickeln Yourapplications verwenden, legt der Vorlagencode Web Form den AutoEventWireup -Attributwert explizit auf falsefest. Gibt es ein wichtiger Unterschied zwischen der standardmäßige thatASP.NET verwendet, und der Standardwert Codeassigns der Visual Studio .NET-Vorlage auf dieses Attribut. Wenn der AutoEventWireup -Attributwert auf falsedie Ereignishandler festgelegt ist, die in deklariert sind die.ASPX-Seite Notfire. Dies kann verwirrend, wenn Sie Thisfunctionality nicht bekannt sein.
  3. Klicken Sie im Menü Datei auf Save PageEvent.aspx.
  4. Maustaste auf die Seite, und klicken Sie dann auf in Browser anzeigen , um die Seite auszuführen. Meldung, die der Fehler ausgelöst wird und Reportedaccording auf die Code-Spezifikationen.
Hinweis Sie können feststellen, gibt der Code einen Aufruf an Server.ClearError aus. Dadurch wird verhindert, dass den Fehler weiterhin Ereignishandler Application_Error .

Darüber hinaus sollten Sie auch das Inherits -Attribut in der @ Page -Direktive beachten. Inherits festgelegt ist, müssen Sie das Projekt erstellen, bevor Sie zu der Seite browsen. Wenn Sie nicht zuerst das Projekt erstellen, wird die folgende Fehlermeldung angezeigt:
'Project.PageEvent' ist ein ungültiger Typ

Wie Sie Application_Error-Methode

Ähnlich wie bei der Page_Error Event-Handler, den Ereignishandler Application_Error können Sie auftretende Fehler in Ihrer Anwendung aufzufangen. Durch das Ereignis anwendungsweit gültig können von Fehlerinformationen protokolliert oder anderen Anwendung auf möglicherweise auftretende Fehler zu behandeln.

Das folgende Beispiel basiert auf dem vorhergehenden Codebeispiel für Page_Error und würde ausgelöst, wenn der Fehler im Page_Load in der Page_Error Event-Handler nicht eingeschlossen war. Der Ereignishandler Application_Error wird in der Datei "Global.asax" Ihrer Anwendung angegeben. Der Einfachheit halber erstellt die Schritte in diesem Abschnitt eine neue Seite, um die Ausnahme abfangen des Fehlers in der Datei Global.asax Ereignishandler Application_Error und den Fehler in das Ereignisprotokoll zu schreiben. Die folgenden Schritte demonstrieren die Application_Error -Methode veranschaulicht:
  1. Fügen Sie eine neue Datei AppEvent.aspx zu erfinden.
  2. Fügen Sie den folgenden Code zu AppEvent.aspx hinzu:
    <script language=C# runat="server">
    	void Page_Load(object sender, System.EventArgs e)
    	{
    		throw(new ArgumentNullException());
    	}
    </script>
    					

    Hinweis Die Informationen im Abschnitt "Page_Error" über das AutoEventWireup -Attribut gilt auch für das Codebeispiel in diesem Schritt. Finden Sie mit dem im Abschnitt "Page_Error" für weitere Details.
  3. Klicken Sie im Menü Datei auf AppEvent.aspx speichern.
  4. Fügen Sie Ereignishandler Application_Error in der Datei Global.asax zum Abfangen des Fehlers, Youthrow im Page_Load -Ereignishandler der Seite AppEvent.aspx hinzu. Beachten Sie, dass Sie Addanother using -Anweisung für den System.Diagnostics -Namespace, damit "Global.asax" das Ereignisprotokoll verwenden müssen.

    Fügen Sie der Datei Global.asax folgende Code hinzu:
    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. Speichern Sie die Datei "Global.asax".
  6. Klicken Sie in Visual Studio .NET im Menü Erstellen auf Erstellen.
  7. Maustaste auf die Seite, und klicken Sie dann auf in Browser anzeigen. In diesem Fall wird die Seite leer sein, Sie sollten jedoch beleuchten, die ein neuer Eintrag in das Ereignisprotokoll hinzugefügt wurde. Dieses Beispiel erstellt einen Eintrag in das Anwendungsprotokoll in der Ereignisanzeige zugegriffen werden kann. Nach Loggingthe Fehler sollten Sie leiten Sie den Benutzer zu einer anderen Seite für mehrere Benutzer Friendlyerror oder einige zusätzlichen Aktionen ausführen, falls erforderlich.

Gewusst wie: verwenden die Datei Web.config

Wenn Sie Server.ClearError nicht aufrufen oder Trap, den Fehler in der Page_Error oder Application_Error Event-Handler, der Fehler behandelt wird, basierend auf den Einstellungen im Abschnitt <customErrors>der Datei "Web.config". Im Abschnitt <customErrors>können Sie eine Umleitungsseite als Standardfehlerseite (DefaultRedirect) angeben oder zu einer bestimmten Seite basierend auf den HTTP-Fehlercode, der ausgelöst wird, angeben. Sie können diese Methode verwenden, um die Fehlermeldung anpassen, die der Benutzer erhält.

Wenn ein Fehler, der nicht auf einer der vorhergehenden Ebenen in Ihrer Anwendung aufgefangen wird auftritt, wird diese benutzerdefinierte Seite angezeigt. In diesem Abschnitt wird veranschaulicht, wie Sie die Datei Global.asax ändern, sodass Server.ClearError nie aufgerufen wird. Daher wird der Fehler in der Datei "Web.config" als letzter Stelle zum Abfangen des Fehlers behandelt. </customErrors></customErrors>
  1. Öffnen Sie die Datei Global.asax aus der Previousexample.
  2. Kommentieren Sie die Zeile Server.ClearError , um sicherzustellen, dass die Flächen Fehler in der Web.configfile.
  3. Speichern Sie Ihre Änderungen, damit "Global.asax". Der Code sollte ähnlich der folgenden 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. Fügen Sie den folgenden Code in die <customErrors>Sectionto leiten den Benutzer auf einer benutzerdefinierten Seite:<b00> </b00> </customErrors>
    <customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On">
    </customErrors>
    						
    Hinweis Sie müssen den Dateipfad im Attribut DefaultRedirect ändern, sodass sie verweist auf den entsprechenden Namen des Andapplication.
  5. Da der Fehler, die auf dieser Ebene aufgefangen werden Sentto eine Standardfehlerseite sind, legen Sie eine Fehlerseite namens ErrorStatus.htm.Keep Denken Sie daran, die Verwendung dieser Methode steuern, was für Rechte, angezeigt werden, damit dieses Beispiel eine HTM-Seite für die Fehlerseite verwendet. Fügen Sie der Followingcode zu ErrorStatus.htm hinzu:
    <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. Um den Code zu testen, speichern Sie die Dateien, erstellen Sie das Projekt, und dann AppEvent.aspx im Browser anzeigen. Beachten Sie, dass Sie der Fehler ausgelöst wird, auf die Seite ErrorStatus.htm umgeleitet werden.
Obwohl Sie eine Standardfehlerseite im Wert des Attributs DefaultRedirect im Abschnitt <customErrors>verweisen können, können Sie auch eine bestimmte Seite umgeleitet, basierend auf den HTTP-Fehlercode, der ausgelöst wird, angeben. Diese Option ermöglicht das untergeordnete Element <error>. Zum Beispiel:<b00> </b00> </error> </customErrors>
<customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On">
	<error statusCode="404" redirect="filenotfound.htm" />
</customErrors>
				
Hinweis Die Seite, die in DefaultRedirect des Abschnitts <customErrors>ist eine HTM-Datei. ICH

Beachten Sie, dass im Abschnitt <customErrors> Mode -Attribut enthält, die auf Onfestgelegt ist. Das Mode -Attribut wird zum Steuern, wie die Umleitung der Fehler auftritt. Z. B. Wenn Sie die Anwendung entwickeln, Sie wahrscheinlich die eigentlichen ASP.NET Fehlermeldungen anzeigen möchten und nicht auf die benutzerfreundlichere Fehlerseite umgeleitet werden möchten. Das Mode -Attribut enthält die folgenden Einstellungen: </customErrors></customErrors>
  • Auf: unbehandelte Ausnahmen leiten den Benutzer auf der Seite angegebene DefaultRedirect . Dieser Modus wird hauptsächlich im Produktiveinsatz verwendet.
  • Off: Benutzer erhalten die Ausnahmeinformationen und werden nicht Redirectedto die Seite DefaultRedirect . Dieser Modus wird hauptsächlich in der Entwicklung verwendet.
  • RemoteOnly: nur Benutzer, die Zugriff auf die Website auf dem lokalen Computer (durch Usinglocalhost) die Ausnahmeinformationen erhalten. Alle anderen Benutzer werden auf die Seite DefaultRedirect umgeleitet. Dieser Modus wird hauptsächlich zum Debuggen verwendet werden.

Problembehandlung

In der Standardinstallation unter Microsoft Windows 2000 und Microsoft Windows XP führt ASP.NET Webanwendungscode in einem Workerprozess. Die Identität dieses Prozesses verwendet standardmäßig ein Konto ohne Berechtigungen lokalen ASPNET-Konto genannt. In Betaversionen von ASP.NET war die Prozessidentität, ein leistungsstarkes administrative Konto mit vielen Berechtigungen auf dem Computer.

In der Standardinstallation unter Windows Server 2003 (IIS 6) führt ASP.NET Webanwendungscode in einem Workerprozess. Die Identität dieses Prozesses verwendet standardmäßig ein eingeschränktes Konto "NetworkService" bezeichnet.

Weitere Informationen dazu und wie es Wirkung unter den Code in diesem Artikel und anderen anderen Code, die möglicherweise zusätzliche Berechtigungen finden Sie auf folgenden Websites:
Version 1 ändert die Sicherheit für das Microsoft.NET Framework
http://msdn2.Microsoft.com/en-us/library/ms994923.aspx

Informationsquellen

Weitere Informationen finden Sie auf den folgenden Microsoft-Websites:
Exception Management in .NET

HttpServerUtility.ClearError-Methode

MSDN .NET Development Center

Homepage von Microsoft .NET

Eigenschaften

Artikel-ID: 306355 - Geändert am: Montag, 28. Oktober 2013 - Version: 1.0
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft ASP.NET 1.0
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft ASP.NET 1.1
  • Microsoft Visual C# .NET 2003 Standard Edition
Keywords: 
kbconfig kbhowtomaster kbweb kbmt KB306355 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell übersetzt und wird dann möglicherweise mithilfe des Community Translation Framework (CTF) von Mitgliedern unserer Microsoft Community nachbearbeitet. Weitere Informationen zu CTF finden Sie unter http://support.microsoft.com/gp/machine-translation-corrections/de.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 306355
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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