Erstellen benutzerdefinierter Fehlerberichtseiten in ASP.NET mit Visual C# .NET

Eine Microsoft Visual Basic .NET Version dieses Artikels finden Sie unter
308132 .

Dieser Artikel bezieht sich auf den folgenden Namespace für Microsoft.NET Framework-Klassenbibliothek:
  • System.Diagnostics

IN DIESER AUFGABE

Zusammenfassung

Dieser Artikel beschreibt, wie mit Visual C# .NET Code abgefangen und behandelt Fehler treten in ASP.NET. ASP.NET verbessert die Fehlerbehandlung Optionen von herkömmlichen Microsoft Active Server Pages (ASP). In ASP.NET können Fehler auf verschiedenen Ebenen in der Anwendung behandelt werden.

zurück zum Anfang

Neue Funktionen in ASP.NET

ASP.NET bietet mehrere Fortschritte Behandlung 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 ASPError -Objekt zum Erstellen einer benutzerdefinierten Fehlerberichterstattungsseite. Diese Methoden haben jedoch ihre Grenzen.

ASP.NET bietet mehrere Ebenen mit können Sie behandeln und reagieren auf Fehler beim Ausführen einer Anwendung ASP.NET. ASP.NET bietet drei Hauptmethoden, mit denen Sie und Behebung von Fehlern bei: Page_Error Application_Errorund der Anwendungskonfigurationsdatei (Web.config).

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

zurück zum Anfang

Verwendung die Page_Error-Methode

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

Hinweis Dieses Beispiel zeigt Informationen im Browser nur zu Demonstrationszwecken. Sie sollten vorsichtig sein, insbesondere beim Ausführen der Anwendungdes im Internet Informationen für den Endbenutzer der Anwendung anzeigen. Weitere Maßnahmen wäre eine Meldung für den Benutzer benachrichtigen, der ein Fehler aufgetreten ist, und dann tatsächlich Protokollierung Fehlermeldungen im Ereignisprotokoll angezeigt.

Dieses Beispiel löst eine Nullausnahme erzwingt einen Fehler im Page_Load -Ereignishandler. Gehen Sie die Startseite erstellen, die mit dem Ereignishandler Page_Error veranschaulichen.
  1. Führen Sie diese Schritte, um eine neue Datei namens PageEvent.aspx zu Ihrem Projekt hinzuzufügen:
    1. Öffnen Sie Microsoft Visual Studio .NET.
    2. Im Projektmappen-Explorer mit der rechten Maustaste des Projektknoten, zeigen Sie auf Hinzufügenund klicken Sie dann auf Web Form hinzufügen.
    3. Geben Sie im Feld Name PageEvent.aspxund klicken Sie 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. Wenn Sie nicht explizit einen Wert das AutoEventWireup -Attribut zuweisen, wird standardmäßig Wert true verwendet. Wenn Sie Visual Studio .NET an der Entwicklung, legt der Vorlagencode Webformular AutoEventWireup -Attributwert explizit auf false. Es ist ein wichtiger Unterschied zwischen dem Standardwert, die ASP.NET verwendet und der Standardwert dieses Attributs der Visual Studio .NET Code zuweist. Wenn der AutoEventWireup -Attributwert auf falsedie Ereignishandler festgelegt, die in deklariert die. ASPX-Seite nicht aus. Möglicherweise verwirrend, wenn diese Funktionalität nicht bekannt ist.
  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. Beachten Sie, dass der Fehler ausgelöst und Spezifikationen Code gemeldet.
Hinweis Sie können feststellen, gibt der Code einen Aufruf Server.ClearError. Dadurch wird verhindert, dass den Fehler weiterhin auf Ereignishandler Application_Error .

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

Verwendung die Application_Error-Methode

Ähnlich Page_Error Event Handler Ereignishandler Application_Error können Sie Fehler in Ihrer Anwendung aufzufangen. Aufgrund des Ereignisses Anwendung können Fehler Informationen protokollieren oder andere Fehler auf Anwendungsebene behandeln.

Das folgende Beispiel basiert auf dem vorhergehenden Codebeispiel für Page_Error und würde ausgelöst, wenn der Fehler in Page_Load nicht im Ereignishandler Page_Error aufgefangen wurde. Ereignishandler Application_Error wird in der Datei Global.asax der Anwendung angegeben. Der Einfachheit halber Erstellen der Schritte in diesem Abschnitt eine neue Seite in der Ausnahme und die Fehler im Ereignishandler Application_Error der Datei Global.asax den Fehler in das Ereignisprotokoll zu schreiben. Die folgenden Schritte demonstrieren Application_Error -Methode verwendet:
  1. Fügen Sie eine neue Datei AppEvent.aspx zu Ihrem Projekt hinzu.
  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 im Beispiel in diesem Schritt. Finden Sie im Abschnitt "Page_Error" für Weitere Informationen.
  3. Klicken Sie im Menü Datei auf AppEvent.aspx speichern.
  4. Fügen Sie Ereignishandler Application_Error der Datei Global.asax, um den Fehler aufzufangen, den Sie im Page_Load-Ereignis der Seite AppEvent.aspx auslösen. Beachten Sie, dass Sie "Global.asax" das Ereignisprotokoll verwenden einen anderen using -Anweisung für den System.Diagnostics -Namespace hinzufügen müssen.

    Der Datei Global.asax den folgenden Code hinzufügen:
    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 die Seite leer sein, jedoch sollten Sie feststellen, dass ein neuer Eintrag im Ereignisprotokoll hinzugefügt wurde. Dieses Beispiel erstellt einen Eintrag im Anwendungsprotokoll der Ereignisanzeige wird. Nach der Anmeldung der Fehlermeldung möchten Sie Benutzer zu einer anderen benutzerfreundlichere Fehlerseite umleiten oder ggf. einige zusätzlichen Aktionen ausführen.
zurück zum Anfang

Verwendung die Datei Web.config

Rufen Sie Server.ClearError oder Trap Fehler in Page_Error oder Ereignishandler Application_Error , der Fehler behandelt wird anhand der Einstellungen im Abschnitt < CustomErrors > der Datei Web.config. Im Abschnitt < CustomErrors > können Sie eine Umleitungsseite als Standardfehlerseite (DefaultRedirect) angeben oder eine bestimmte Seite basierend auf den HTTP-Fehlercode, der ausgelöst wird. Diese Methode können Sie 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. Dieser Abschnitt veranschaulicht, wie die Datei Global.asax ändern, sodass Server.ClearError nie aufgerufen wird. Dadurch wird der Fehler in der Datei Web.config als letzter Stelle zum Abfangen des Fehlers behandelt.
  1. Öffnen Sie die Datei Global.asax aus dem vorherigen Beispiel.
  2. Kommentieren Sie die Zeile Server.ClearError um sicherzustellen, dass die Flächen Fehler in der Datei Web.config.
  3. Speichern der Global.asax. Ihr Code sollte jetzt etwa wie folgt aussehen:
    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 folgenden Code im Abschnitt < CustomErrors > um den Benutzer auf eine benutzerdefinierte Seite umzuleiten:
    <customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On"></customErrors>

    Hinweis Sie müssen den Dateipfad im Attribut DefaultRedirect ändern, sodass es die relevanten Web Server und Anwendung verweist.
  5. Da die Fehler, die auf dieser Ebene aufgefangen werden an eine Standardfehlerseite gesendet werden, müssen Sie eine Fehlerseite namens ErrorStatus.htm erstellen. Denken Sie daran, die Verwendung dieser Methode wird gesteuert, was dem Benutzer angezeigt wird in diesem Beispiel eine HTM-Seite für die Fehlerseite verwendet. Fügen Sie den folgenden Code 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. Zum Testen des Codes speichern Sie, erstellen Sie das Projekt und zeigen Sie AppEvent.aspx im Browser. Beachten Sie, dass wenn der Fehler ausgelöst wird, auf die Seite ErrorStatus.htm umgeleitet werden.
Obwohl Sie den Wert des Attributs DefaultRedirect im Abschnitt < CustomErrors > Standardfehlerseite verweisen können, können Sie auch eine bestimmte Seite umleiten basierend auf den HTTP-Fehlercode, der ausgelöst wird, angeben. < Fehler > untergeordnete Fehlerelement ermöglicht diese Option. Beispiel:
<customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On"><error statusCode="404" redirect="filenotfound.htm" />
</customErrors>

Hinweis Im Abschnitt < CustomErrors > DefaultRedirect angegebene Seite ist eine HTM-Datei. Ich

Beachten Sie, dass im Abschnitt < CustomErrors > Mode -Attribut enthält, das auffestgelegt ist. Das Mode -Attribut zum Steuern, wie die Umleitung 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 Folgendes:
  • Auf: Ausnahmefehler Benutzer DefaultRedirect angegebene Seite umgeleitet. Dieser Modus wird hauptsächlich im Produktiveinsatz verwendet.
  • Off: Benutzer erhalten die Ausnahmeinformationen und werden nicht auf die Seite DefaultRedirect umgeleitet. Dieser Modus wird hauptsächlich in der Entwicklung verwendet.
  • RemoteOnly: nur Benutzer, die Zugriff auf die Website auf dem lokalen Computer (über Localhost) die Ausnahmeinformationen. Alle anderen Benutzer werden auf die Seite DefaultRedirect umgeleitet. Dieser Modus wird hauptsächlich für das Debuggen verwendet.
zurück zum Anfang

Problembehandlung:

In der Standardinstallation von Microsoft Windows 2000 und Microsoft Windows XP führt ASP.NET Webanwendungscode in einem Workerprozess. Die Identität dieses Prozesses verwendet standardmäßig ein nicht berechtigte lokale Konto ASPNET-Konto. 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 aufgerufen.

Weitere Informationen über diese Änderung und wie es Effekt mit dem Code in diesem Artikel und anderen Code, der möglicherweise zusätzliche Rechte finden Sie auf folgenden Websites:
Version 1 wird für Microsoft.NET Framework-Sicherheit
http://msdn2.microsoft.com/en-us/library/ms994923.aspx
zurück zum Anfang
Eigenschaften

Artikelnummer: 306355 – Letzte Überarbeitung: 20.01.2017 – Revision: 1

Feedback