URLs in C# richtig zusammenfügen: Tutorial zu Path.Combine für das Web

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

Warum Path.Combine URLs zerstört und wie man es behebt?



Stellen Sie sich vor: Sie schreiben eine C#-Anwendung, die auf eine API zugreift. Sie müssen eine URL wie https://api.example.com/v1/users/123 zusammenbauen. Das Erste, was Ihnen in den Sinn kommt, ist das vertraute Path.Combine zu verwenden. Und das ist ein Fehler, den Tausende von Entwicklern machen. Die Frage „Path.Combine for URLs?“ auf Stack Overflow hat Hunderttausende von Aufrufen gesammelt – und das nicht ohne Grund.



In diesem Artikel werden wir analysieren, warum Path.Combine für URLs tödlich gefährlich ist, und Ihnen 4 korrekte Methoden zeigen, um Adressen in C# zusammenzufügen. Sie erfahren, wie UriBuilder funktioniert, warum Sie die Bibliothek Flurl in Betracht ziehen sollten und wie Sie Ihre eigene sichere Methode zur URL-Verkettung schreiben. Los geht's!



Das Problem: Was ist falsch an Path.Combine?



Die Methode Path.Combine wurde für Windows-Dateisysteme entwickelt. Sie verwendet den umgekehrten Schrägstrich (\\) und berücksichtigt Besonderheiten von Laufwerken (z. B. C:\\). URLs hingegen arbeiten mit dem normalen Schrägstrich (/) und kennen kein Konzept eines „Laufwerks“. Schauen wir uns ein Beispiel an:



string baseUrl = "https://api.example.com/api";string endpoint = "/users/123";string result = Path.Combine(baseUrl, endpoint);Console.WriteLine(result);// Ausgabe: https:\\\\api.example.com\\api\\users\\123 (unter Windows)// Oder noch schlimmer: https://api.example.com/api/users/123 (wenn man Glück hat)


Das Ergebnis ist, gelinde gesagt, ungültig. Path.Combine ersetzt die normalen Schrägstriche durch umgekehrte (unter Windows), und Ihr HTTP-Request wird mit einem Fehler fehlschlagen. Selbst wenn unter Linux alles normal aussieht, wird der Code nicht portabel. Und wenn die Basis-URL bereits einen Schrägstrich am Ende hat? Oder der Endpunkt einen doppelten Schrägstrich? Dann beginnt das Chaos.



Ein reales Beispiel von Stack Overflow

Eine der beliebtesten Antworten auf die Frage „Path.Combine for URLs?“ (Autor: Brian, 600+ Upvotes) beginnt mit dem Satz: „Bitte tun Sie das nicht. Path.Combine ist für Dateien, nicht für URLs.“ Und das ist die goldene Regel. Lassen Sie uns herausfinden, welche Werkzeuge C# für die sichere Arbeit mit URLs bietet.



Methode 1: Uri.TryCreate – integrierte .NET-Methode



Der erste und naheliegendste Weg ist die Verwendung der Klasse Uri. Sie kann eine Basis-URL und einen relativen Pfad korrekt zusammenfügen:



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

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


Wichtig: Das zweite Argument von TryCreate muss ein relativer URI sein (mit / beginnen). Wenn Sie einfach "users/123" übergeben, wird dies als absolut interpretiert – und das Ergebnis ist falsch. Dies ist nicht die flexibelste Methode, aber für einfache Fälle eine hervorragende integrierte Lösung.



Methode 2: UriBuilder – leistungsstark und flexibel



Die Klasse UriBuilder gibt Ihnen die vollständige Kontrolle über jeden Teil einer URL: Schema, Host, Port, Pfad und Query-Parameter. Dies ist die ideale Wahl, wenn Sie eine komplexe Adresse zusammenbauen müssen:



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());// Ausgabe: https://api.example.com:8080/api/v1/users?page=1&limit=10


Warum ist das großartig?

  • Automatisches Escaping – Sonderzeichen in Query-Parametern werden kodiert.
  • Korrekte Schrägstriche – UriBuilder fügt automatisch Schrägstriche hinzu oder entfernt überflüssige.
  • Ports und Schemata – einfach http in https ändern oder einen Port hinzufügen.


Es gibt jedoch eine Nuance: Path

Blogs

Buchempfehlungen