HTTP-Client in C#: Anfragen richtig 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

Einleitung: Warum ein korrekter HTTP-Client in C# wichtig ist

In der modernen Entwicklung auf der .NET-Plattform kommt kaum eine Anwendung ohne die Interaktion mit entfernten Servern aus. Ob es um das Abrufen von Daten von einer REST API, das Senden von Formularen an einen Webserver oder das Herunterladen von Dateien geht – all dies erfordert eine korrekte Implementierung von HTTP-Anfragen. In C# gibt es mehrere Ansätze, aber die modernste und empfohlene Methode ist die Klasse HttpClient aus dem Namensraum System.Net.Http. In diesem Artikel werden wir uns ansehen, wie man einen HTTP-Client in C# richtig erstellt, typische Fehler vermeidet und effizienten Code schreibt.



Grundlegende Klassen für die Arbeit mit HTTP in C# (.NET)

Bevor wir zu den Beispielen übergehen, ist es wichtig zu verstehen, welche Werkzeuge die .NET-Plattform bereitstellt. Die grundlegenden Klassen sind:

  • HttpClient – die Hauptklasse zum Senden von Anfragen und Empfangen von Antworten. Sie sollte als Singleton verwendet werden (eine Instanz für die gesamte Anwendung).
  • HttpRequestMessage – ermöglicht die detaillierte Konfiguration der Anfrage: Methode, Header, Body, Protokollversion.
  • HttpResponseMessage – enthält die Antwort vom Server: Status, Header, Body.
  • HttpContent – die Basisklasse zur Darstellung des Bodys einer Anfrage oder Antwort (z. B. StringContent, ByteArrayContent, MultipartFormDataContent).

Die wichtigste Regel: Erstellen Sie keine neue Instanz von HttpClient für jede Anfrage. Dies führt zur Erschöpfung von Sockets und Leistungseinbußen. Verwenden Sie eine einzige statische oder injizierte Instanz.



Konfiguration von HttpClient: Einfaches Beispiel

Betrachten wir eine minimale Konfiguration. Wir erstellen eine Instanz von HttpClient und legen eine Basisadresse fest:

using System;using System.Net.Http;using System.Threading.Tasks;

public class ApiService{ private static readonly HttpClient client = new HttpClient();

public ApiService() { client.BaseAddress = new Uri("https://api.example.com/"); client.DefaultRequestHeaders.Add("User-Agent", "C# HttpClient App"); client.DefaultRequestHeaders.Accept.Add( new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); }

public async Task<string> GetDataAsync(string endpoint) { HttpResponseMessage response = await client.GetAsync(endpoint); response.EnsureSuccessStatusCode(); // Wirft eine Ausnahme bei einem Fehler return await response.Content.ReadAsStringAsync(); }}

Beachten Sie response.EnsureSuccessStatusCode() – dies ist eine einfache Möglichkeit zu überprüfen, ob die Anfrage erfolgreich war (Code 2xx).



Praktische Beispiele für HTTP-Anfragen in C#

Kommen wir nun zu konkreten Szenarien. Wir werden GET- und POST-Anfragen sowie die Arbeit mit Headern und die Fehlerbehandlung betrachten.



1. GET-Anfrage mit Parametern

Um Parameter in der Abfragezeichenfolge zu übergeben, können Sie die Sammlung QueryHelpers aus Microsoft.AspNetCore.WebUtilities verwenden oder die URL manuell erstellen. Unten ist ein Beispiel mit manueller Erstellung:

public async Task<string> SearchUsersAsync(string name, int page){    var query = $"/users?name={Uri.EscapeDataString(name)}&page={page}";    HttpResponseMessage response = await client.GetAsync(query);    response.EnsureSuccessStatusCode();    return await response.Content.ReadAsStringAsync();}

Verwenden Sie immer Uri.EscapeDataString() zum Escapen von Parametern, um Fehler mit Sonderzeichen zu vermeiden.



2. POST-Anfrage mit JSON-Body

Zum Senden von Daten im JSON-Format ist es praktisch, die Bibliothek System.Text.Json (oder Newtonsoft.Json) zu verwenden. Wir konvertieren ein Objekt in JSON und senden es:

using System.Text;using System.Text.Json;

public

Blogs

Buchempfehlungen