如何在C#中使用这些部分可靠地build立一个URL?

我一直觉得自己在重新发明轮子,所以我想我会问这里的人群。 想象一下,我有这样的代码片段:

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 

我想build立url“ http://www.google.com/plans/worlddomination.html ”。 我一直这样写这样的俗气的代码:

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

我真正想要的是某种类似的API:

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

我相信这是存在于.NET框架的地方,但是我从来没有遇到过。

什么是build立万无一失(即从未畸形)url的最佳方式?

查看UriBuilder类

UriBuilder非常适合处理URL前端的位(比如协议),但是在查询string中没有提供任何内容。 Flurl [披露:我是作者]试图用一些stream利的善意填补这个空白:

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

有一个新的协同库,它用HTTP客户端调用来扩展stream畅的链,并包含一些漂亮的testingfunction 。 NuGet提供完整的软件包:

PM> Install-Package Flurl.Http

或者只是独立的URL构build器:

PM> Install-Package Flurl