Anpassen von HTTP 400- und 404-Fehlern in ASP.NET Core – Devart Blog (2023)

Einführung

Zum Speichern und Abrufen von Daten aus der Datenbank verwenden wirdotConnect für PostgreSQL, ein leistungsstarker und erweiterter Datenanbieter für PostgreSQL, der auf ADO.NET aufbaut und sowohl im verbundenen als auch im getrennten Modus arbeiten kann.

Voraussetzungen

Für den Umgang mit Codebeispielen benötigen Sie die folgenden Tools:

  • Visual Studio 2022 Community Edition
  • PostgreSQL
  • dotConnect für PostgreSQL

Sie können PostgreSQL hier herunterladen:https://www.postgresql.org/download/

Sie können hier eine Testversion von dotConnect für PostgreSQL herunterladen:https://www.devart.com/dotconnect/postgresql/download.html

Was bauen wir hier?

In diesem Artikel erstellen wir eine einfache Anwendung, die zeigt, wie HTTP 400- und 404-Fehlerantworten in ASP.NET 6 angepasst werden. Hier sind die Schritte, die wir in diesem Artikel befolgen, um dies zu erreichen:

  1. Gewinnen Sie ein Verständnis für Middleware in ASP.NET Core
  2. Erstellen Sie ein ASP.NET 6 Core-Web-API-Projekt in Visual Studio 2022
  3. Fügen Sie das Devart.Data.PostgreSql NuGet-Paket zum API-Projekt hinzu
  4. Schreiben Sie einen einfachen Controller und die zugehörigen Klassen
  5. Erstellen Sie eine benutzerdefinierte Middleware zur Verarbeitung von HTTP 400-Fehlerantworten
  6. Erstellen Sie eine weitere benutzerdefinierte Middleware, um HTTP 404-Fehlerantworten zu verarbeiten
  7. Führen Sie die Anwendung aus

Was ist eine Middleware?

In ASP.NET Core ist eine Middleware eine Komponente, die zwischen einem Webserver und der Anforderungs-/Antwortpipeline einer Anwendung sitzt und eingehende Anforderungen und ausgehende Antworten verarbeitet. Neben der Prüfung und Bearbeitung von HTTP-Anfragen und -Antworten können Middleware-Komponenten auch Authentifizierung, Protokollierung, Caching, Komprimierung, Routing und mehr übernehmen.

Das folgende Codebeispiel zeigt eine benutzerdefinierte Middleware:

öffentliche Klasse MyCustomMiddleware{ private readonly RequestDelegate _next; public CustomBadRequestMiddleware(RequestDelegate next) { _next = next; } public async Task InvokeAsync(HttpContext context) { waiting _next(context); context.Response.Headers.Add("X-Custom-Header", "Hello World!"); }}

Erstellen Sie ein neues ASP.NET 6 Core-Web-API-Projekt

In diesem Abschnitt erfahren Sie, wie Sie ein neues ASP.NET 6 Core-Web-API-Projekt in Visual Studio 2022 erstellen.

Befolgen Sie nun die unten beschriebenen Schritte:

  1. Öffnen Sie Visual Studio 2022.
  2. KlickenErstellen Sie ein neues Projekt.
  3. WählenASP.NET Core-Web-APIund klickenNächste.
  4. Geben Sie den Projektnamen und den Speicherort an, um das Projekt in Ihrem System zu speichern. Aktivieren Sie optional das KontrollkästchenPlatzieren Sie Lösung und Projekt im selben VerzeichnisKontrollkästchen.
  5. KlickenNächste.
  6. ImWeitere InformationenFenster auswählen.NET 6.0 (Langzeitunterstützung)als Projektversion.
  7. Deaktivieren Sie dieKonfigurieren Sie für HTTPSUndAktivieren Sie die Docker-UnterstützungOptionen (deaktivieren Sie sie).
  8. Da wir in diesem Beispiel keine Authentifizierung verwenden, wählen Sie den Authentifizierungstyp als ausKeiner.
  9. Da wir in diesem Beispiel Open API nicht verwenden, deaktivieren Sie die OptionAktivieren Sie die OpenAPI-UnterstützungKontrollkästchen.
  10. Da wir in diesem Beispiel keine minimalen APIs verwenden, stellen Sie sicher, dass dieController verwenden (deaktivieren Sie die Option, um nur minimale APIs zu verwenden)wird geprüft.
  11. Lassen Sie dieVerwenden Sie keine Anweisungen der obersten EbeneKontrollkästchen deaktiviert.
  12. KlickenErstellenum den Vorgang abzuschließen.

Wir werden dieses Projekt in diesem Artikel verwenden.

Installieren Sie NuGet-Pakete im API-Projekt

In Ihrem API-Projekt, also dem Projekt, das Sie gerade erstellt haben, sollten Sie das dotConnect for PostgreSql-Paket in Ihrem Projekt installieren. dotConnect for PostgreSQL ist ein leistungsstarker Datenanbieter für PostgreSQL, der auf der ADO.NET-Technologie basiert und eine umfassende Lösung für die Erstellung von PostgreSQL-basierten Datenbankanwendungen bietet.

Sie können dieses Paket entweder über das NuGet Package Manager-Tool in Visual Studio oder über die NuGet Package Manager-Konsole mit dem folgenden Befehl installieren:

PM> Install-Paket Devart.Data.PostgreSql

Erstellen Sie die Datenbank

Sie können eine Datenbank mit dem Tool pgadmin erstellen. Um eine Datenbank mit diesem Tool zu erstellen, führen Sie die folgenden Schritte aus:

  1. Starten Sie das pgadmin-Tool
  2. Erweitern Sie den Abschnitt „Server“.
  3. Wählen Sie Datenbanken aus
  4. Klicken Sie mit der rechten Maustaste und klicken Sie auf Erstellen -> Datenbank…
  5. Geben Sie den Namen der Datenbank an und belassen Sie die anderen Optionen auf ihren Standardwerten
  6. Klicken Sie auf Speichern, um den Vorgang abzuschließen

Erstellen Sie eine Datenbanktabelle

Wählen Sie die soeben erstellte Datenbank aus und erweitern Sie sie

Wählen Sie Schemata -> Tabellen

Klicken Sie mit der rechten Maustaste auf Tabellen und wählen Sie Erstellen -> Tabelle…

Das Tabellenskript finden Sie unten als Referenz:

CREATE TABLE Lieferant (ID serieller PRIMÄRSCHLÜSSEL, Vorname VARCHAR (50) NICHT NULL, Nachname VARCHAR (50) NICHT NULL, Adresse VARCHAR (255) NICHT NULL);

Wir werden diese Datenbank in den folgenden Abschnitten dieses Artikels verwenden, um zu demonstrieren, wie wir mit Integrationstests in ASP.NET Core mithilfe von dotConnect für PostgreSQL arbeiten können.

Fügen Sie der Lieferantentabelle einige Datensätze hinzu

Führen Sie nun das folgende Skript in Ihrer Datenbank aus, um einige Datensätze in die Lieferantentabelle einzufügen:

INSERT INTO Lieferant(Vorname, Nachname, Adresse)VALUES („James“, „Payne“, „London, UK“);INSERT INTO Lieferant(Vorname, Nachname, Adresse)VALUES („Steve“, „Jones“, „Chicago, USA');INSERT INTO Lieferant(Vorname, Nachname, Adresse)VALUES ('Samuel', 'Anderson', 'Dallas, USA');

Abbildung 1 unten zeigt den pgAdmin-Editor, in dem Sie Ihre Skripts schreiben und ausführen können:

Abbildung 1: In die Lieferantentabelle eingefügte Datensätze

Erstellen Sie im Fenster „Lösungs-Explorer“ einen Lösungsordner und nennen Sie ihn „Modelle“. Erstellen Sie als Nächstes eine CS-Datei namens „Supplier.cs“ mit dem folgenden Code:

öffentliche Klasse Lieferant { public int Id { get; Satz; } public string FirstName { get; Satz; } öffentlicher String Nachname { get; Satz; } öffentliche Zeichenfolge Adresse { get; Satz; } }

Die ISupplierRepository-Schnittstelle würde so aussehen:

öffentliche Schnittstelle ISupplierRepository { public List GetSuppliers(); }

Beachten Sie, dass wir der Einfachheit halber nur eine Methode in der ISupplierRepository-Schnittstelle haben. Die SupplierRepository-Klasse implementiert die GetSuppliers-Methode der ISupplierRepository-Schnittstelle und kapselt alle Datenbankoperationen.

public class SupplierRepository : ISupplierRepository { public List GetSuppliers() { try { List sellers = new List(); using (PgSqlConnection pgSqlConnection = new PgSqlConnection("User Id = postgres; Password = sa123#;" + "host=localhost;database=postgres;")) { using (PgSqlCommand pgSqlCommand = new PgSqlCommand()) { pgSqlCommand.CommandText = " Wählen Sie * From public.supplier"; pgSqlCommand.Connection = pgSqlConnection; if (pgSqlConnection.State != System.Data.ConnectionState.Open) pgSqlConnection.Open(); using (PgSqlDataReader pgSqlReader = pgSqlCommand.ExecuteReader()) { while (pgSqlReader.Read()) { Lieferant Lieferant = neuer Lieferant(); Lieferant.Id = int.Parse(pgSqlReader.GetValue(0).ToString()); Lieferant.FirstName = pgSqlReader.GetValue(1).ToString(); Lieferant.LastName = pgSqlReader.GetValue(2).ToString(); Lieferant.Address = pgSqlReader.GetValue(3).ToString(); Lieferanten.Add(Lieferant); } } } } Lieferanten zurückgeben; } fangen { werfen; } } }

Wählen Sie als Nächstes den Lösungsordner „Controller“ aus, klicken Sie mit der rechten Maustaste darauf und erstellen Sie eine neue Controller-Klasse namens „SupplierController“ mit dem folgenden Code darin:

[Route("api/[controller]")] [ApiController] public class SupplierController : ControllerBase { private readonly ISupplierRepository _supplierRepository; public SupplierController(ISupplierRepository LieferantRepository) { _supplierRepository = LieferantRepository; } [HttpGet] public List Get() { return _supplierRepository.GetSuppliers(); } }

Beachten Sie, wie eine Instanz vom Typ ISupplierRepository in den Konstruktor der SupplierController-Klasse eingefügt wird. Denken Sie daran, dass Sie dem Dienstcontainer eine Instanz vom Typ ISupplierRepository hinzufügen müssen, indem Sie den folgenden Codeabschnitt in der Datei Program.cs verwenden:

builder.Services.AddScoped();

Ausführen der Anwendung

Wenn Sie die Anwendung ausführen und den GetSuppliers-Endpunkt aufrufen, werden alle Datensätze der Lieferantendatenbanktabelle in Ihrem Webbrowser angezeigt. Wenn Sie jedoch einen Endpunkt angeben, der nicht vorhanden ist, tritt ein HTTP-404-Fehler auf. Wenn die Anfrage jedoch fehlerhaft ist, wird ein HTTP 400-Fehler angezeigt. In den folgenden Abschnitten untersuchen wir, wie wir diese Fehler anpassen können, d. h. die Anfragen abfangen und HTTP 400- oder HTTP 404-Antworten anpassen.

Anpassen von HTTP 400-Antworten

Wenn Sie mit ASP.NET Core arbeiten, können Sie HTTP 400- und 404-Antworten anpassen, um Fehler in Ihrer Anwendung eleganter zu behandeln. Dazu sollten Sie eine Middleware-Komponente erstellen, die die Anfrage abfängt und eine benutzerdefinierte Antwort zurückgibt.

öffentliche Klasse CustomNotFoundMiddleware { private readonly RequestDelegate _next; public CustomNotFoundMiddleware(RequestDelegate next) { _next = next; } public async Task InvokeAsync(HttpContext context) { waiting _next(context); if (context.Response.StatusCode == 404) { context.Response.ContentType = "application/json"; string text = „Die angeforderte Ressource wurde nicht gefunden …“; var json = JsonSerializer.Serialize(text); Warten Sie auf context.Response.WriteAsync(json); } } }

Im vorherigen Codebeispiel prüft die Middleware, ob der Antwortstatuscode 400 ist. Wenn dies der Fall ist, legt die Middleware den Inhaltstyp der Antwort auf JSON fest und gibt eine benutzerdefinierte Fehlermeldung zurück. Um diese Middleware zu verwenden, sollten Sie sie der Anforderungsverarbeitungspipeline in der Datei Program.cs hinzufügen, wie im folgenden Codeausschnitt gezeigt:

app.UseMiddleware();

Anpassen von HTTP 404-Antworten

Ebenso können Sie zum Anpassen eines HTTP 404-Fehlers eine andere Middleware-Komponente nutzen, die die Anfrage abfangen und eine benutzerdefinierte Antwort zurückgeben kann, wie unten gezeigt:

öffentliche Klasse CustomBadRequestMiddleware { private readonly RequestDelegate _next; public CustomBadRequestMiddleware(RequestDelegate next) { _next = next; } public async Task InvokeAsync(HttpContext context) { waiting _next(context); if (context.Response.StatusCode == 400) { context.Response.ContentType = "application/json"; string text = „Ungültige Anfrage …“; var json = JsonSerializer.Serialize(text); Warten Sie auf context.Response.WriteAsync(json); } } }

Ähnlich wie im vorherigen Beispiel zeigt das vorangehende Codebeispiel, wie die benutzerdefinierte Middleware prüft, ob der Antwortstatuscode 404 ist. Wenn dies der Fall ist, fängt die Middleware-Komponente die Anfrage ab und sendet eine benutzerdefinierte Textnachricht als Antwort. Um diese Middleware zur Pipeline hinzuzufügen, sollten Sie den folgenden Code in der Program.cs-Datei Ihres Projekts verwenden:

app.UseMiddleware();

Fehler bei der Validierung des Lizenzschlüssels

Wenn Sie die Anwendung ausführen, können Lizenzvalidierungsfehler auftreten, wenn kein gültiger Lizenzschlüssel verfügbar ist. Wenn die Lizenzschlüsselvalidierung fehlschlägt, wird Folgendes angezeigt:Devart.Common.LicenseException. Um diesen Fehler zu beheben, müssen Sie entweder über einen Lizenzschlüssel verfügen und bereits Benutzer sein oder die Installationsdatei installieren, die einen Testschlüssel im System installiert.

Zusammenfassung

Sie können benutzerdefinierte, aussagekräftigere Nachrichten bereitstellen, indem Sie die HTTP-400- und 404-Fehlerantworten in Ihrer Anwendung anpassen. Beachten Sie, dass wir in diesem Beispiel zwei verschiedene benutzerdefinierte Middleware-Klassen verwendet haben, um HTTP 400- und 404-Fehlerantworten zu verarbeiten. Sie können hierfür auch eine benutzerdefinierte Middleware-Klasse verwenden. Wenn Sie jedoch mehrere HTTP-Fehlerantworten in einer einzigen benutzerdefinierten Middleware-Klasse verarbeiten, verstößt dies nicht nur gegen das Prinzip der Einzelverantwortung, sondern erschwert auch die Verwaltung und Wartung Ihres Codes im Laufe der Zeit .

FAQs

How to handle 404 error in asp net core? ›

Handling 404 Errors in ASP.NET Core MVC
  1. Step 1: Create a Custom Error Page. The first step in handling 404 errors is to create a custom error page that will be displayed to the user when a 404 error occurs. ...
  2. Step 2: Configure the Application to Handle 404 Errors. ...
  3. Step 3: Test the 404 Error Handling.
May 30, 2022

What is 404 status code in .NET core? ›

In the preceding action: A 404 status code is returned when the product doesn't exist in the database. A 200 status code is returned with the corresponding Product object when the product does exist.

How to show 404 error in asp net? ›

If you have IIS 6.0,
  1. Right click the website, select Properties.
  2. Click on the Custom Errors tab.
  3. Scroll down the list and look for the HTTP Error 404, see figure 1.
  4. Double click the HTTP Error 404 and you should see a popup window like the one in figure 2.
Jan 19, 2011

What is the error message for 404 in asp net? ›

The Web server returns the HTTP 404 - File not found error message when it cannot retrieve the page that was requested. The following are some common causes of this error message: The requested file has been renamed. The requested file has been moved to another location and/or deleted.

How do I fix HTTP Error 404? ›

4 Ways to Resolve 404 Errors
  1. Restart your browser. Try closing the current window and opening a new one. ...
  2. Clear cache. Remove your browser data and history. ...
  3. Double-check for mistyped characters. ...
  4. Use another device. ...
  5. Switch to the Incognito window.

What is the solution for 404 Not Found error? ›

If the URL for a page has changed, the old URL should be retained as a redirect file. Redirects are the easiest way to fix a 404 error. Restore deleted webpages as long as there is no business reason to keep it deleted. If there is a reason to keep it deleted, then the link should be redirected.

How to redirect to error page in asp net core? ›

ASP.net core comes with a catch all middleware that handles all exceptions and will redirect the user to a particular error page. This is pretty similar to the default redirect in the CustomErrors attribute in web. config or the HandleError attribute in full framework MVC.

What is 404 status code example? ›

The HTTP 404 Not Found response status code indicates that the server cannot find the requested resource. Links that lead to a 404 page are often called broken or dead links and can be subject to link rot. A 404 status code only indicates that the resource is missing: not whether the absence is temporary or permanent.

What is status 400 and 404? ›

A 400 Bad Request error indicates that the server was unable to understand the request. This can be caused by incorrect syntax or invalid characters in the URL. A 404 Not Found error means that the server was unable to find the requested resource.

How to handle error in asp net core web api? ›

In non-development environments, use Exception Handling Middleware to produce an error payload:
  1. In Program.cs , call UseExceptionHandler to add the Exception Handling Middleware: C# Copy. ...
  2. Configure a controller action to respond to the /error route: C# Copy.
Apr 10, 2023

How to handle 404 error in Spring REST? ›

Implementing Exception Handling- 404 Resource Not Found
  1. Step 1: Open Rest client Postman and select the Get method.
  2. Step 2: Click on the History tab and choose the Get request.
  3. Step 3: Type the URI http://localhost:8080/users/{id}. ...
  4. Step 4: Click on the Send Button.
  5. Step 1: Open the UserResource.

How to handle 500 internal server error in asp net core? ›

What To Check
  1. Check Logs - Application, Windows Event Logs. Check to see if there is anything that could give you a hint in the logs. ...
  2. Check Configuration file (web.config) According to the Microsoft Docs, this is because of malformed XML. ...
  3. .NET Runtime. ...
  4. Re-installing the hosting bundles. ...
  5. Restart. ...
  6. Reboot Machine.
Apr 1, 2022

References

Top Articles
Latest Posts
Article information

Author: Fredrick Kertzmann

Last Updated: 10/03/2023

Views: 6077

Rating: 4.6 / 5 (66 voted)

Reviews: 89% of readers found this page helpful

Author information

Name: Fredrick Kertzmann

Birthday: 2000-04-29

Address: Apt. 203 613 Huels Gateway, Ralphtown, LA 40204

Phone: +2135150832870

Job: Regional Design Producer

Hobby: Nordic skating, Lacemaking, Mountain biking, Rowing, Gardening, Water sports, role-playing games

Introduction: My name is Fredrick Kertzmann, I am a gleaming, encouraging, inexpensive, thankful, tender, quaint, precious person who loves writing and wants to share my knowledge and understanding with you.