Fehlerbehandlung in ASP.NET Core mit RFC 7807

Fehlerbehandlung in ASP.NET Core mit RFC 7807

In der Softwareentwicklung, insbesondere beim Erstellen von APIs, ist es wichtig, Fehler effektiv und konsistent zu kommunizieren. Dies hilft sowohl den Benutzern der API als auch den Entwicklern, die sie warten und debuggen müssen.

Ein Ansatz zur standardisierten Fehlerbehandlung ist die Verwendung der Problem Details-Spezifikation, RFC 7807. Dieser Standard skizziert ein gemeinsames Format für HTTP-Antworten, um maschinenlesbare Details von Fehlern in HTTP-APIs zu übertragen.

Verständnis von RFC 7807

RFC 7807 ist ein Standard für HTTP-APIs, der einen strukturierten Ansatz zur Rückgabe von Fehlermeldungen bietet.

Die grundlegende Struktur einer RFC 7807-Fehlerantwort sieht wie folgt aus:

{
  "type": "https://example.com/probs/out-of-credit",
  "title": "Sie haben nicht genug Guthaben.",
  "status": 403,
  "detail": "Ihr aktuelles Guthaben beträgt 30, aber das kostet 50.",
  "instance": "/account/12345/msgs/abc"
}

ProblemDetails Struktur

Diese Struktur beinhaltet:

  • type: Eine URI, die den Problem-Typ identifiziert. Dies kann verwendet werden, um dem Client mehr Informationen über das Problem zur Verfügung zu stellen.
  • title: Eine kurze, menschenlesbare Zusammenfassung des Problems.
  • status: Der vom Ursprungsserver für dieses Auftreten des Problems generierte HTTP-Statuscode.
  • detail: Eine menschenlesbare Erklärung, die spezifisch für dieses Auftreten des Problems ist.
  • instance: Eine URI, die das spezifische Auftreten des Problems identifiziert.

Implementierung von RFC 7807 in ASP.NET Core

ASP.NET Core bietet integrierte Unterstützung für die Generierung von RFC 7807-konformen Fehlerantworten mithilfe der ProblemDetails-Klasse. Diese Klasse, wenn sie in JSON serialisiert wird, folgt der RFC 7807-Struktur.

Hier ist ein Beispiel, wie Sie die ProblemDetails-Klasse in einem ASP.NET Core API-Controller verwenden können:

[HttpGet("{id}")]
public ActionResult Get(int id)
{
    var order = _orderService.GetOrder(id);

    if (order == null)
    {
        var problemDetails = new ProblemDetails
        {
            Status = StatusCodes.Status404NotFound,
            Type = "https://yourapi.com/errors/order-not-found",
            Title = "Bestellung nicht gefunden",
            Detail = $"Die Bestellung mit der ID {id} wurde nicht im System gefunden."
        };
        return NotFound(problemDetails);
    }

    return Ok(order);
}

Anpassen der Problem Details

Die ProblemDetails-Klasse kann erweitert werden, um zusätzliche Eigenschaften hinzuzufügen, die spezifischere Fehlerinformationen liefern.

public class OrderNotFoundProblemDetails : ProblemDetails
{
    public string OrderId { get; set; }
}

In diesem Beispiel wurde der OrderId-Eigenschaft zur ProblemDetails-Klasse hinzugefügt, um zusätzliche Informationen über einen Fehler in Bezug auf eine bestimmte Bestellung bereitzustellen.

Zusammenfassung

RFC 7807 bietet einen standardisierten und strukturierten Ansatz zur Fehlerbehandlung in HTTP-APIs. Die integrierte Unterstützung von ASP.NET Core für RFC 7807 ermöglicht die einfache Implementierung konsistenter und aussagekräftiger Fehlerantworten in Ihren APIs.