Envoyer HTTP POST en .NET : du débutant au pro avec C#

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

Comment envoyer une requête HTTP POST en .NET avec C# : du simple au complexe

\n\n

Imaginez que votre application C# est un livreur qui doit livrer un colis (des données) à une adresse spécifique (URL) et obtenir un accusé de réception (réponse). C'est exactement ce que résout une requête HTTP POST. Sur Stack Overflow, cette question cumule des milliers de vues, et pour cause : travailler avec des API externes, envoyer des formulaires, télécharger des données sur un serveur — c'est le quotidien de tout développeur .NET.

\n\n

Dans cet article, nous allons explorer trois méthodes principales pour envoyer une requête POST en .NET (C#), en commençant par le moderne HttpClient et en terminant par l'ancien WebRequest. Vous apprendrez à transmettre du JSON, des données encodées en URL, à gérer les erreurs et à éviter les pièges qui guettent les débutants. C'est parti !

\n\n

1. L'approche moderne : HttpClient (recommandé)

\n\n

Depuis .NET Framework 4.5 et dans toutes les versions de .NET Core / .NET 5+, la classe HttpClient est le standard de facto. Elle est conçue pour le travail asynchrone, prend en charge la réutilisation des connexions et se configure facilement.

\n\n

1.1. POST simple avec JSON (le scénario le plus courant)

\n\n

Supposons que nous devions envoyer les données d'un utilisateur au serveur au format JSON. Voici à quoi cela ressemble en code réel :

\n\n
using System;\nusing System.Net.Http;\nusing System.Text;\nusing System.Text.Json;\nusing System.Threading.Tasks;\n\npublic class UserService\n{\n    private readonly HttpClient _httpClient;\n\n    public UserService(HttpClient httpClient)\n    {\n        _httpClient = httpClient;\n    }\n\n    public async Task<UserResponse> CreateUserAsync(UserDto newUser)\n    {\n        // 1. Sérialiser l'objet en JSON\n        var json = JsonSerializer.Serialize(newUser);\n        var content = new StringContent(json, Encoding.UTF8, "application/json");\n\n        // 2. Envoyer le POST\n        HttpResponseMessage response = await _httpClient.PostAsync("https://api.example.com/users", content);\n\n        // 3. Lire la réponse\n        response.EnsureSuccessStatusCode(); // Lève une exception si le statut n'est pas 2xx\n\n        var responseBody = await response.Content.ReadAsStringAsync();\n        return JsonSerializer.Deserialize<UserResponse>(responseBody);\n    }\n}\n\n// Exemple d'utilisation\npublic class Program\n{\n    public static async Task Main()\n    {\n        var client = new HttpClient();\n        var service = new UserService(client);\n        \n        var user = new UserDto { Name = "Jean", Email = "jean@example.com" };\n        var result = await service.CreateUserAsync(user);\n        Console.WriteLine($"Utilisateur créé avec l'ID : {result.Id}");\n    }\n}\n\npublic class UserDto\n{\n    public string Name { get; set; }\n    public string Email { get; set; }\n}\n\npublic class UserResponse\n{\n    public int Id { get; set; }\n}
\n\n

Points importants :

\n
    \n
  • Utilisez toujours async/await — cela évite de bloquer le thread.
  • \n
  • EnsureSuccessStatusCode() est votre meilleur allié pour une vérification rapide des erreurs.
  • \n
  • Ne créez pas un nouveau HttpClient pour chaque requête — cela entraîne un épuisement des sockets. Utilisez IHttpClientFactory dans ASP.NET Core ou une instance statique unique.
  • \n
\n\n

1.2. POST avec données de formulaire (application/x-www-form-urlencoded)

\n\n

Parfois, l'API exige des données au format d'un formulaire HTML classique. Pour cela, utilisez FormUrlEncodedContent :

\n\n
public async Task<string> PostFormDataAsync(string username, string password)\n{\n    var formData = new Dictionary<string, string>\n    {\n        { "grant_type", "password" },\n        { "username", username },\n        { "password", password }\n    };\n\n    var content = new FormUrlEncodedContent(formData);\n\n    using var client = new HttpClient();\n    var response = await client.PostAsync("https://api.example.com/token", content);\n    response.EnsureSuccessStatusCode();\n\n    return await response.Content.ReadAsStringAsync();\n}
\n\n

Astuce pro : Pour les formulaires plus complexes avec fichiers joints, utilisez MultipartFormDataContent.

\n\n

2. L'approche classique : WebRequest (pour la compatibilité)

\n\n

Bien que HttpClient soit recommandé, vous rencontrerez encore du code legacy utilisant WebRequest. Voici un exemple équivalent :

\n\n
public string PostWithWebRequest(string url, string jsonData)\n{\n    var request = (HttpWebRequest)WebRequest.Create(url);\n    request.Method = "POST";\n    request.ContentType = "application/json";\n\n    byte[] bytes = Encoding.UTF8.GetBytes(jsonData);\n    request.ContentLength = bytes.Length;\n\n    using (var stream = request.GetRequestStream())\n    {\n        stream.Write(bytes, 0, bytes.Length);\n    }\n\n    using (var response = (HttpWebResponse)request.GetResponse())\n    using (var reader = new StreamReader(response.GetResponseStream()))\n    {\n        return reader.ReadToEnd();\n    }\n}
\n\n

Attention : WebRequest est obsolète dans .NET 6+. Utilisez-le uniquement si vous maintenez du code existant.

\n\n

3. Gestion des erreurs et bonnes pratiques

\n\n

Voici les pièges les plus fréquents et comment les éviter :

\n\n
    \n
  • Timeout : Définissez toujours un timeout avec client.Timeout = TimeSpan.FromSeconds(30);
  • \n
  • Erreurs réseau : Utilisez des blocs try-catch pour capturer HttpRequestException et TaskCanceledException.
  • \n
  • Respect des limites de débit : Ajoutez un délai entre les requêtes si l'API a un rate limiting.
  • \n
  • Journalisation : Enregistrez les requêtes et réponses pour faciliter le débogage.
  • \n
\n\n

Conclusion

\n\n

Vous savez maintenant envoyer une requête HTTP POST en .NET avec C# comme un professionnel. Que vous utilisiez HttpClient pour des API modernes ou WebRequest pour de l'ancien code, ces techniques vous serviront au quotidien. N'oubliez pas de toujours gérer les erreurs et de suivre les bonnes pratiques pour des applications robustes.

\n\n

Prêt à passer à la pratique ? Essayez d'intégrer ces exemples dans votre prochain projet .NET !

Blogs

Book Recommendations