HTTP-Client in C#: Anfragen richtig von A bis Z stellen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

HTTP-Client in C#: Anfragen richtig von A bis Z stellen

\n\n

In der modernen Entwicklung auf der .NET-Plattform ist die Arbeit mit HTTP-Anfragen eine der wichtigsten Aufgaben. Ob es sich um die Integration mit einer externen REST-API, das Senden von Daten an einen Server oder das Herunterladen von Webseiten handelt – die korrekte Verwendung von HttpClient in C# ist entscheidend für die Leistung und Stabilität einer Anwendung. In diesem Artikel werden wir alle Aspekte der Arbeit mit dem HTTP-Client in C# behandeln: von grundlegenden Beispielen bis hin zu fortgeschrittenen Techniken, Fehlerbehandlung und Best Practices.

\n\n

1. Grundlagen der Arbeit mit HttpClient in C#

\n\n

HttpClient ist die Hauptklasse in .NET zum Senden von HTTP-Anfragen und Empfangen von Antworten. Sie befindet sich im Namensraum System.Net.Http und ist ab .NET Framework 4.5 sowie in allen Versionen von .NET Core/.NET 5+ verfügbar.

\n\n

Wichtige Regel: HttpClient ist für die Wiederverwendung ausgelegt. Für jede Anfrage eine neue Instanz zu erstellen, ist ein Anti-Pattern, das zur Erschöpfung von Sockets (socket exhaustion) führen kann. Verwenden Sie stattdessen eine einzelne statische Instanz oder eine Singleton-Instanz.

\n\n

Ein grundlegendes Beispiel einer GET-Anfrage:

\n\n
using System;\nusing System.Net.Http;\nusing System.Threading.Tasks;\n\nclass Program\n{\n    private static readonly HttpClient client = new HttpClient();\n\n    static async Task Main(string[] args)\n    {\n        try\n        {\n            HttpResponseMessage response = await client.GetAsync("https://api.example.com/data");\n            response.EnsureSuccessStatusCode();\n            string responseBody = await response.Content.ReadAsStringAsync();\n            Console.WriteLine(responseBody);\n        }\n        catch (HttpRequestException e)\n        {\n            Console.WriteLine($"Anfragefehler: {e.Message}");\n        }\n    }\n}
\n\n

In diesem Beispiel erstellen wir einen statischen HttpClient, senden eine GET-Anfrage, überprüfen den Erfolg der Antwort mit EnsureSuccessStatusCode() und lesen den Antworttext als Zeichenfolge.

\n\n

2. Arten von HTTP-Anfragen und Arbeiten mit Headern

\n\n

Neben GET unterstützt HttpClient alle gängigen HTTP-Methoden: POST, PUT, DELETE, PATCH und andere. Betrachten wir das Senden einer POST-Anfrage mit JSON-Daten – dies ist das häufigste Szenario bei der Arbeit mit REST-APIs.

\n\n

Beispiel einer POST-Anfrage mit JSON:

\n\n
using System;\nusing System.Net.Http;\nusing System.Text;\nusing System.Text.Json;\nusing System.Threading.Tasks;\n\nclass Program\n{\n    private static readonly HttpClient client = new HttpClient();\n\n    static async Task Main(string[] args)\n    {\n        var data = new { Name = "John", Age = 30 };\n        string json = JsonSerializer.Serialize(data);\n        var content = new StringContent(json, Encoding.UTF8, "application/json");\n\n        try\n        {\n            HttpResponseMessage response = await client.PostAsync("https://api.example.com/users", content);\n            response.EnsureSuccessStatusCode();\n            string result = await response.Content.ReadAsStringAsync();\n            Console.WriteLine($"Benutzer erstellt: {result}");\n        }\n        catch (HttpRequestException e)\n        {\n            Console.WriteLine($"Fehler: {e.Message}");\n        }\n    }\n}
\n\n

Arbeiten mit Headern: Oft erfordern APIs die Übergabe von Authentifizierungstokens oder anderen Headern. Diese können auf zwei Arten hinzugefügt werden:

\n\n
    \n
  • Global – über die Eigenschaft DefaultRequestHeaders (für alle Anfragen des Clients).
  • \n
  • Lokal – über die Sammlung Headers im Objekt HttpRequestMessage (für eine bestimmte Anfrage).
  • \n
\n\n

Beispiel für das Hinzufügen eines Authorization-Headers:

\n\n
// Global\nclient.DefaultRequestHeaders.Authorization = \n    new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", "your-token");\n\n// Lokal\nvar request = new HttpR                

Blogs

Buchempfehlungen