Assembler correctement une URL en C# : tutoriel sur Path.Combine pour le web

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

Pourquoi Path.Combine casse les URL et comment y remédier ?



Imaginez : vous écrivez une application en C# qui accède à une API. Vous devez assembler une URL du type https://api.example.com/v1/users/123. La première idée qui vous vient est d'utiliser le familier Path.Combine. Et c'est une erreur que commettent des milliers de développeurs. La question « Path.Combine for URLs? » sur Stack Overflow a recueilli des centaines de milliers de vues — et ce n'est pas pour rien.



Dans cet article, nous allons voir pourquoi Path.Combine est mortellement dangereux pour les URL, et vous montrer 4 méthodes correctes pour assembler des adresses en C#. Vous apprendrez comment fonctionne UriBuilder, pourquoi il faut envisager la bibliothèque Flurl et comment écrire votre propre méthode sécurisée de fusion d'URL. C'est parti !



Le problème : qu'est-ce qui cloche avec Path.Combine ?



La méthode Path.Combine a été conçue pour les systèmes de fichiers Windows. Elle utilise la barre oblique inversée (\\) et tient compte des spécificités des disques (par exemple, C:\\). Les URL, quant à elles, utilisent la barre oblique (/) et n'ont pas de notion de « disque ». Regardons un exemple :



string baseUrl = "https://api.example.com/api";string endpoint = "/users/123";string result = Path.Combine(baseUrl, endpoint);Console.WriteLine(result);// Sortie : https:\\\\api.example.com\\api\\users\\123 (sur Windows)// Ou pire encore : https://api.example.com/api/users/123 (si vous avez de la chance)


Le résultat est, pour le moins, invalide. Path.Combine remplace les barres obliques par des barres obliques inversées (sous Windows), et votre requête HTTP échouera avec une erreur. Même si sous Linux tout semble normal, le code devient non portable. Et si l'URL de base a déjà une barre oblique à la fin ? Ou si le endpoint a une double barre oblique ? Le cauchemar commence.



Exemple réel issu de Stack Overflow

L'une des réponses les plus populaires à la question « Path.Combine for URLs? » (auteur — Brian, plus de 600 votes positifs) commence par cette phrase : « S'il vous plaît, ne faites pas cela. Path.Combine est pour les fichiers, pas pour les URL. » Et c'est une règle d'or. Voyons quels outils C# propose pour travailler en toute sécurité avec les URL.



Méthode 1 : Uri.TryCreate — méthode intégrée .NET



La première méthode, la plus évidente, consiste à utiliser la classe Uri. Elle sait correctement fusionner une URL de base et un chemin relatif :



string baseUrl = "https://api.example.com/api";string relativePath = "/users/123";

if (Uri.TryCreate(baseUrl, relativePath, out Uri result)){ Console.WriteLine(result.ToString()); // Sortie : https://api.example.com/users/123}else{ Console.WriteLine("URL invalide");}


Important : le deuxième argument de TryCreate doit être un URI relatif (commençant par /). Si vous passez simplement "users/123", il sera interprété comme absolu — et le résultat sera incorrect. Ce n'est pas la méthode la plus flexible, mais pour les cas simples, c'est une excellente solution intégrée.



Méthode 2 : UriBuilder — puissant et flexible



La classe UriBuilder offre un contrôle total sur chaque partie de l'URL : schéma, hôte, port, chemin et paramètres de requête. C'est le choix idéal lorsque vous devez assembler une adresse complexe :



var builder = new UriBuilder("https://api.example.com");builder.Port = 8080;builder.Path = "/api/v1/users";builder.Query = "page=1&limit=10";

Uri uri = builder.Uri;Console.WriteLine(uri.ToString());// Sortie : https://api.example.com:8080/api/v1/users?page=1&limit=10


Pourquoi est-ce génial ?

  • Échappement automatique — les caractères spéciaux dans les paramètres de requête seront encodés.
  • Barres obliques correctes — UriBuilder ajoute ou supprime lui-même les barres obliques superflues.
  • Ports et schémas — facile de passer de http à https ou d'ajouter un port.


Mais il y a un détail : Path

Blogs

Book Recommendations