Behandlung von 404-Fehlern in ASP.NET Core MVC

ASP.NET Core MVC ist das .NET Core-Gegenstück zum ASP.NET MVC-Framework zum Erstellen plattformübergreifender, skalierbarer, leistungsstarker Webanwendungen und APIs unter Verwendung des Model-View-Controller-Entwurfsmusters. Obwohl ASP.NET Core viele Optionen für die ordnungsgemäße Behandlung von 404-Fehlern bietet, nutzt die ASP.NET Core MVC-Laufzeit diese überraschenderweise nicht standardmäßig.

Wenn eine Webseite nicht gefunden wird und ein 404-Fehler von der Anwendung zurückgegeben wird, zeigt ASP.NET Core MVC daher nur eine allgemeine Browser-Fehlerseite an (siehe Abbildung 1 unten). In diesem Artikel werden drei Optionen in ASP.NET Core erläutert, mit denen wir 404-Fehler eleganter behandeln können.

Um mit den in diesem Artikel bereitgestellten Codebeispielen arbeiten zu können, muss Visual Studio 2019 auf Ihrem System installiert sein. Wenn Sie noch keine Kopie haben, können Sie Visual Studio 2019 hier herunterladen.

Erstellen Sie ein ASP.NET Core MVC-Projekt

Zunächst erstellen wir ein ASP.NET Core-Projekt in Visual Studio. Angenommen, Visual Studio 2019 ist auf Ihrem System installiert, führen Sie die folgenden Schritte aus, um ein neues ASP.NET Core-Projekt in Visual Studio zu erstellen.

  1. Starten Sie die Visual Studio-IDE.
  2. Klicken Sie auf "Neues Projekt erstellen".
  3. Wählen Sie im Fenster "Neues Projekt erstellen" aus der Liste der angezeigten Vorlagen "ASP.NET Core-Webanwendung" aus.
  4. Weiter klicken. 
  5. Geben Sie im nächsten Fenster "Konfigurieren Sie Ihr neues Projekt" den Namen und den Speicherort für das neue Projekt an.
  6. Klicken Sie auf Erstellen.
  7. Wählen Sie im Fenster "Neue ASP.NET Core-Webanwendung erstellen" .NET Core als Laufzeit und ASP.NET Core 3.1 (oder höher) aus der Dropdown-Liste oben aus.
  8. Wählen Sie als Projektvorlage „Webanwendung (Model-View-Controller)“ aus, um eine neue ASP.NET Core MVC-Anwendung zu erstellen.
  9. Stellen Sie sicher, dass die Kontrollkästchen "Docker-Unterstützung aktivieren" und "Für HTTPS konfigurieren" deaktiviert sind, da diese Funktionen hier nicht verwendet werden.
  10. Stellen Sie sicher, dass die Authentifizierung auf "Keine Authentifizierung" eingestellt ist, da wir auch keine Authentifizierung verwenden.
  11. Klicken Sie auf Erstellen.

Wenn Sie diese Schritte ausführen, wird in Visual Studio 2019 ein neues ASP.NET Core MVC-Projekt erstellt. In diesem Projekt werden unsere 404-Fehlerbehandlungsoptionen in den folgenden Abschnitten dieses Artikels erläutert.

Wenn Sie das im vorherigen Abschnitt erstellte ASP.NET Core MVC-Projekt ausführen, wird die Startseite der Anwendung zusammen mit der Begrüßungsnachricht angezeigt (siehe Abbildung 1 unten). 

Versuchen wir nun, eine nicht vorhandene Webseite zu durchsuchen. Geben Sie dazu // localhost: 6440 / welcome in die Adressleiste Ihres Browsers ein, während die Anwendung ausgeführt wird. Wenn die ASP.NET Core MVC-Engine die Ressource für die angegebene URL nicht finden kann, wird ein 404-Fehler zurückgegeben und die folgende Fehlerseite angezeigt. Das ist nicht sehr elegant, oder?

Überprüfen Sie Response.StatusCode in ASP.NET Core MVC

Es gibt verschiedene Möglichkeiten, wie Sie diese allgemeine Fehlerseite verbessern können. Eine einfache Lösung besteht darin, in der Antwort nach dem HTTP-Statuscode 404 zu suchen. Wenn gefunden, können Sie das Steuerelement auf eine vorhandene Seite umleiten. Das folgende Codefragment zeigt, wie Sie den erforderlichen Code in die Configure-Methode der Startup-Klasse schreiben können, um bei einem 404-Fehler zur Homepage umzuleiten.

 app.Use (async (Kontext, weiter) =>

    {

        warte auf next ();

        if (context.Response.StatusCode == 404)

        {

            context.Request.Path = "/ Home";

            warte auf next ();

        }}

    });

Wenn Sie nun die Anwendung ausführen und versuchen, die URL // localhost: 6440 / welcome zu durchsuchen, werden Sie zur Startseite der Anwendung weitergeleitet.

Der vollständige Code der Configure-Methode wird unten als Referenz angegeben.

public void Configure (IApplicationBuilder-App, IWebHostEnvironment env)

        {

            if (env.IsDevelopment ())

            {

                app.UseDeveloperExceptionPage ();

            }}

            sonst

            {

                app.UseExceptionHandler ("/ Home / Error");

            }}

            app.Use (async (Kontext, weiter) =>

            {

                warte auf next ();

                if (context.Response.StatusCode == 404)

                {

                    context.Request.Path = "/ Home";

                    warte auf next ();

                }}

            });

            app.UseStaticFiles ();

            app.UseRouting ();

            app.UseAuthorization ();

            app.UseEndpoints (Endpunkte =>

            {

                endpoints.MapControllerRoute (

                    Name: "Standard",

                    Muster: "{controller = Home} / {action = Index} / {id?}");

            });

        }}

Verwenden Sie die Middleware UseStatusCodePages in ASP.NET Core MVC

Eine zweite Lösung zur Behandlung von 404-Fehlern in ASP.NET Core ist die Verwendung der integrierten Middleware UseStatusCodePages. Das folgende Codeausschnitt zeigt, wie Sie StatusCodePages in der Configure-Methode der Startup-Klasse implementieren können.

public void Configure (IApplicationBuilder-App, IWebHostEnvironment env)

        {

            app.UseStatusCodePages ();

            // Anderer Code

        }}

Wenn Sie nun die Anwendung ausführen und zu der nicht vorhandenen Ressource navigieren, ähnelt die Ausgabe Abbildung 3.

Verwenden Sie die Middleware UseStatusCodePagesWithReExecute in ASP.NET Core MVC

Sie können die UseStatusCodePagesWithReExecute-Middleware nutzen, um nicht erfolgreiche Statuscodes zu verarbeiten, wenn der Prozess zum Generieren der Antwort noch nicht gestartet wurde. Daher behandelt diese Middleware keine HTTP 404-Statuscodefehler. Wenn ein 404-Fehler auftritt, wird die Steuerung an eine andere Controller-Aktion übergeben, um den Fehler zu behandeln.

Das folgende Codefragment zeigt, wie Sie diese Middleware verwenden können, um zu einer anderen Aktionsmethode umzuleiten.

app.UseStatusCodePagesWithReExecute ("/ Home / HandleError / {0}");

So würde die Aktionsmethode aussehen.

[Route ("/ Home / HandleError / {code: int}")]

public IActionResult HandleError (int code)

{

   ViewData ["ErrorMessage"] = $ "Fehler aufgetreten. Der ErrorCode lautet: {code}";

   return View ("~ / Views / Shared / HandleError.cshtml");

}}

Ich überlasse es Ihnen, die HandleError-Ansicht zu erstellen, um die Fehlermeldung anzuzeigen.

Schließlich möchten Sie möglicherweise Ansichten speziell für einen Fehlercode erstellen. Beispielsweise können Sie Ansichten wie Home / Error / 500.cshtml oder Home / Error / 404.cshtml erstellen. Sie können dann den HTTP-Fehlercode überprüfen und zur entsprechenden Fehlerseite umleiten.

Eine weitere Möglichkeit, mit nicht gefundenen Seitenfehlern umzugehen, besteht darin, eine benutzerdefinierte Ansicht zu verwenden und den Fehlercode entsprechend festzulegen. Wenn in Ihrer Anwendung ein Fehler auftritt, können Sie den Benutzer auf die entsprechende Fehlerseite umleiten und Ihre benutzerdefinierte Fehlermeldung anzeigen, die den Fehler beschreibt.

So machen Sie mehr in ASP.NET Core:

  • Verwendung der Abhängigkeitsinjektion in Aktionsfiltern in ASP.NET Core 3.1
  • Verwendung des Optionsmusters in ASP.NET Core
  • Verwendung des Endpunktroutings in ASP.NET Core 3.0 MVC
  • Exportieren von Daten nach Excel in ASP.NET Core 3.0
  • Verwendung von LoggerMessage in ASP.NET Core 3.0
  • So senden Sie E-Mails in ASP.NET Core
  • So protokollieren Sie Daten in SQL Server in ASP.NET Core
  • So planen Sie Jobs mit Quartz.NET in ASP.NET Core
  • So geben Sie Daten von der ASP.NET Core Web API zurück
  • So formatieren Sie Antwortdaten in ASP.NET Core
  • So verwenden Sie eine ASP.NET Core-Web-API mit RestSharp
  • So führen Sie asynchrone Vorgänge mit Dapper aus
  • Verwendung von Feature-Flags in ASP.NET Core
  • Verwendung des FromServices-Attributs in ASP.NET Core
  • So arbeiten Sie mit Cookies in ASP.NET Core
  • So arbeiten Sie mit statischen Dateien in ASP.NET Core
  • Verwendung der URL-Rewriting-Middleware in ASP.NET Core
  • Implementieren der Ratenbegrenzung in ASP.NET Core
  • So verwenden Sie Azure Application Insights in ASP.NET Core
  • Verwenden erweiterter NLog-Funktionen in ASP.NET Core
  • Behandlung von Fehlern in der ASP.NET-Web-API
  • Implementieren der globalen Ausnahmebehandlung in ASP.NET Core MVC
  • Umgang mit Nullwerten in ASP.NET Core MVC
  • Erweiterte Versionierung in der ASP.NET Core-Web-API
  • So arbeiten Sie mit Worker Services in ASP.NET Core
  • Verwendung der Datenschutz-API in ASP.NET Core
  • Verwendung der bedingten Middleware in ASP.NET Core
  • So arbeiten Sie mit dem Sitzungsstatus in ASP.NET Core
  • So schreiben Sie effiziente Controller in ASP.NET Core