Client HTTP en C# : faire des requêtes correctement de A à Z

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : pourquoi un client HTTP approprié en C# est important



Dans le développement C# (.NET) moderne, travailler avec des requêtes HTTP est une nécessité fondamentale. Qu'il s'agisse d'appeler une API REST, de télécharger des données depuis un serveur web ou d'intégrer des services cloud — un client HTTP fiable est essentiel. Cependant, de nombreux développeurs, en particulier les débutants, commettent des erreurs typiques : une gestion incorrecte des connexions, l'ignorance des délais d'attente ou un traitement inefficace des réponses. Dans cet article, nous allons détailler la création d'un client HTTP en C#, des bases aux techniques avancées.



Nous examinerons la classe HttpClient — l'outil principal pour travailler avec HTTP dans .NET, ainsi que des approches alternatives. Vous apprendrez à envoyer correctement des requêtes GET et POST, à gérer le JSON, à manipuler les en-têtes et à éviter les problèmes de performance courants.



Les bases : créer et configurer HttpClient



Initialisation correcte de HttpClient



La classe HttpClient est conçue pour être réutilisée. Créer une nouvelle instance pour chaque requête est un anti-modèle qui peut entraîner un épuisement des sockets. Utilisez plutôt une instance unique pour toute l'application ou l'injection de dépendances (DI) via IHttpClientFactory.



// Incorrect : création pour chaque requêtepublic async Task<string> BadRequest(string url){    using (var client = new HttpClient())    {        return await client.GetStringAsync(url);    }}

// Correct : instance statiquepublic static readonly HttpClient SharedClient = new HttpClient();

// Ou via IHttpClientFactory (recommandé pour ASP.NET Core)services.AddHttpClient("MyClient", client =>{ client.BaseAddress = new Uri("https://api.example.com"); client.DefaultRequestHeaders.Add("Accept", "application/json");});


Configuration des délais d'attente et de l'adresse de base



Les délais d'attente protègent l'application contre les blocages lorsque le serveur est indisponible. HttpClient a son propre délai d'attente, mais il peut être remplacé.



HttpClient client = new HttpClient{    BaseAddress = new Uri("https://jsonplaceholder.typicode.com"),    Timeout = TimeSpan.FromSeconds(10) // 10 secondes pour l'ensemble de la requête};


Il est également utile de définir MaxResponseContentBufferSize pour limiter la taille des données reçues.



Envoi de requêtes : GET, POST, PUT et DELETE



Requête GET : récupération de données



La façon la plus simple d'obtenir des données est GetStringAsync ou GetAsync avec un traitement manuel.



public async Task<string> GetUsersAsync(){    HttpResponseMessage response = await SharedClient.GetAsync("/users");    response.EnsureSuccessStatusCode(); // lève une exception en cas d'erreur    return await response.Content.ReadAsStringAsync();}

// Ou encore plus simple :string json = await SharedClient.GetStringAsync("/users");


Requête POST : envoi de données



Pour envoyer du JSON, utilisez PostAsJsonAsync (nécessite le package System.Net.Http.Json).



var newUser = new { name = "Ivan", email = "ivan@example.com" };HttpResponseMessage response = await SharedClient.PostAsJsonAsync("/users", newUser);if (response.IsSuccessStatusCode){    var createdUser = await response.Content.ReadFromJsonAsync<User>();}


Pour envoyer un formulaire, utilisez FormUrlEncodedContent.



var formData = new Dictionary<string, string>{    { "username", "admin" },    { "password", "secret" }};var content = new FormUrlEncodedContent(formData);HttpResponseMessage response = await SharedClient.PostAsync("/login", content);


Requêtes PUT et DELETE



La mise à jour et la suppression se font de manière similaire :



// PUTvar updateData = new { id = 1, name = "Updated name" };HttpResponseMessage putR                

Blogs

Book Recommendations