2009-11-18 16 views
12

Ich rolle oft meine eigenen Wrapper/Extension-Methoden für/um System.Uri und fragte mich, ob jemand eine gute Open-Source-Implementierung kennt. Was ich am liebsten mache, ist das Parsen von Querystring-Parametern, das Erstellen einer neuen Query-Zeichenfolge (dies ist der Schlüssel) und das Ersetzen von Seitennamen. Hast du irgendwelche guten, oder ist System.Uri gut genug für dich?C# Url Builder Klasse

Antwort

15

BradVins QueryString Builder Klasse ist gut. Fließende Schnittstelle und Unterstützung für die Verschlüsselung.

Es lohnt sich auch, diese UrlBuilder Klasse auf CodeProject zu überprüfen. Ähnlich wie System.UriBuilder hat bessere Unterstützung für die Arbeit mit dem QueryString.

+0

Kudos zu dieser Antwort. Das ist fast wortwörtlich, wo ich seit Jahren rolle. Ich mag den UriBuilder nicht, weil ich mehr Funktionalität zum dynamischen Hinzufügen von qs-Parametern haben möchte. – Trent

6

Wir benutzen unsere eigene alternative Uri-Klasse, die teilweise auf Uri basiert, wie Sie sagen. Ich denke jedoch, dass eine wichtige Unterscheidung zu treffen ist - System.Uri soll im Allgemeinen unveränderlich sein - oder, genauer gesagt, sich unveränderlich verhalten. Sobald es einmal existiert, stellt es einen präzisen universellen Standort-/Ressourcenendpunkt dar. Wenn Sie einen anderen Ort beschreiben müssen, sollten Sie einen neuen Uri erstellen und den vorhandenen nicht ändern.

Es gibt eine separate Klasse, die sich auf die Herstellung von Uri spezialisiert hat: UriBuilder.

0

Ich bin mir nicht sicher, was genau Sie versuchen zu tun (Beispiele würden helfen), aber es klingt wie Sie versuchen, einige der Funktionen von Apache mod_rewrite in ASP.NET zu bekommen.

Es gibt an article at MSDN über genau dies.

3

Zwischen System.Uri und System.UriBuilder, welche Funktionen genau fehlt Ihnen von diesen beiden?

+0

Uri ist unveränderlich wie Rex M geklärt. Aber ich wusste nicht einmal von UriBuilder. Will hineinschauen. – Trent

1

Es gibt ein sehr nettes neues Open-Source-Projekt auf CodePlex, das Ihnen erlaubt, zu lesen, zu schreiben, Uris und ein bisschen mehr zu verschlüsseln. Schau sie dir an!

http://querystrings.codeplex.com

2
/// <summary> 
    /// The arguments must be like: varName1, varValue1, varName2, varValue2 and so on. 
    /// Empty names will be not be added to the result. 
    /// Returns a string of the form varName1=varValue1&varName2=varValue2... 
    /// </summary>  
    public static string BuildQueryString(params string[] strings) 
    { 
     Debug.Assert(0 == strings.GetLength(0) % 2); 

     StringBuilder builder = new StringBuilder(50); 
     bool isName = true; 
     bool isEmptyName = false; 

     foreach (string crtString in strings) 
     { 
      isEmptyName = (isName && string.IsNullOrEmpty(crtString)) || 
       (!isName && isEmptyName); 

      if (!isEmptyName) 
      { 
       builder.Append(HttpUtility.UrlEncode(crtString)); 

       if (isName) 
        builder.Append("="); 
       else 
        builder.Append("&"); 
      } 

      isName = !isName; 
     } 

     return builder.ToString(); 
    } 
12

Flurl [Offenlegung: Ich bin der Autor] ist ein fließender URL-Builder, der wie folgt aussieht:

var url = "http://www.some-api.com" 
    .AppendPathSegment("endpoint") 
    .SetQueryParams(new { 
     api_key = ConfigurationManager.AppSettings["SomeApiKey"], 
     max_results = 20, 
     q = "Don't worry, I'll get encoded!" 
    }); 

Wenn Sie zufällig zu bauen URLs für den Zweck zu ruft sie, Flurl.Http ist eine begleitende Lib, die Sie HTTP aus der fließenden Kette machen können:

await "https://api.mysite.com" 
    .AppendPathSegment("person") 
    .SetQueryParams(new { ap_key = "my-key" }) 
    .WithOAuthBearerToken("MyToken") 
    .PostJsonAsync(new { first_name = firstName, last_name = lastName }); 

Holen Sie sich das komplette Paket auf NuGet:

PM> Install-Package Flurl.Http

oder nur die Stand-alone-URL Builder:

PM> Install-Package Flurl