如何使用这些部件在 C# 中可靠地构建 URL?

Posted

技术标签:

【中文标题】如何使用这些部件在 C# 中可靠地构建 URL?【英文标题】:How to reliably build a URL in C# using the parts? 【发布时间】:2010-11-11 05:13:08 【问题描述】:

我一直觉得我在重新发明***,所以我想我应该问问这里的人群。想象一下,我有一个这样的代码 sn-p:

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

我想建立网址“http://www.google.com/plans/worlddomination.html”。我一直在写这样的俗气的代码来做到这一点:

protocol = protocol.EndsWith("://") ? protocol : protocol + "://";
path = path.StartsWith("/") ? path : "/" + path;    
string fullUrl = string.Format("012", 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 框架中的某个地方,但我没有遇到过。

构建万无一失(即从不畸形)网址的最佳方法是什么?

【问题讨论】:

阅读 Alex Black 的回答,然后点击这里:social.msdn.microsoft.com/Search/en-US/… 【参考方案1】:

查看UriBuilder class

【讨论】:

【参考方案2】:

UriBuilder 非常适合处理 URL 前面的位(如协议),但在查询字符串方面不提供任何内容。 Flurl [披露:我是作者] 试图用一些流畅的优点来填补这个空白:

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

有一个新的配套库 extends the fluent chain with HTTP client calls 并包含一些漂亮的 testing features。 NuGet 上提供了完整的包:

PM> Install-Package Flurl.Http

或只是独立的 URL 构建器:

PM> Install-Package Flurl

【讨论】:

以上是关于如何使用这些部件在 C# 中可靠地构建 URL?的主要内容,如果未能解决你的问题,请参考以下文章

如何在对 C# .NET 3.5 服务器进行 DCOM 调用时可靠地检查客户端身份?

1.凤凰架构:构建可靠的大型分布式系统 --- 服务架构演进史

1.凤凰架构:构建可靠的大型分布式系统 --- 服务架构演进史

影响无人机可靠性的因素和无人机可靠性设计

如何确保在崩溃 c# 时保存应用程序状态

如何使用 C# 可靠地确定安装了 SQL Server 2008 的哪些组件?