2009-07-16 6 views
34

Je continue de me sentir comme si je réinventais la roue, alors j'ai pensé que je demanderais à la foule ici. Imaginez que j'ai un extrait de code comme ceci:Comment construire de manière fiable une URL en C# en utilisant les pièces?

string protocol = "http"; // Pretend this value is retrieved from a config file 
string host = "www.google.com"; // Pretend this value is retrieved from a config file 
string path = "plans/worlddomination.html"; // Pretend this value is retrieved from a config file 

Je veux construire l'url « http://www.google.com/plans/worlddomination.html ». Je continue à le faire en écrivant le code ringard comme ceci:

protocol = protocol.EndsWith("://") ? protocol : protocol + "://"; 
path = path.StartsWith("/") ? path : "/" + path;  
string fullUrl = string.Format("{0}{1}{2}", protocol, host, path); 

Ce que je veux vraiment est une sorte de API comme:

UrlBuilder builder = new UrlBuilder(); 
builder.Protocol = protocol; 
builder.Host = host; 
builder.Path = path; 
builder.QueryString = null; 
string fullUrl = builder.ToString(); 

Je dois croire cela existe dans le cadre de .NET quelque part, mais nulle part J'ai rencontré

Quelle est la meilleure façon de fabriquer des urnes infaillibles (c'est-à-dire jamais mal formées)?

+0

réponse Read Alex Noir, puis cliquez ici: http: //social.msdn .microsoft.com/Recherche/fr-FR /? Refinement = 27% 2c117 & Query = Uri + Builder –

Répondre

24

UriBuilder est idéal pour traiter les bits à l'avant de l'URL (comme protocole), mais ne propose rien sur le côté querystring. Flurl [divulgation: Je suis l'auteur] tente de combler cette lacune avec une certaine bonté couramment:

using Flurl; 

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!" 
    }); 

Il y a une nouvelle bibliothèque d'accompagnement qui extends the fluent chain with HTTP client calls et comprend certains testing features astucieux. Le package complet est disponible sur NuGet:

PM> Install-Package Flurl.Http

ou tout simplement le constructeur URL autonome:

PM> Install-Package Flurl

Questions connexes