您在示例中使用的 HttpValueCollection 实际上并不是微不足道的,它利用 System.Web 库的许多其他部分为您编码有效的 http url。可以为您需要的部分提取源代码,但它可能会级联成比您想象的更多的东西!
如果您理解这一点并且只是想要一些原始的东西,因为您已经确保键和值被正确编码,那么最简单的事情就是自己动手。
这是一个示例,以 NameValueCollection 的扩展方法的形式:
public static class QueryExtensions
{
public static string ToQueryString(this NameValueCollection nvc)
{
IEnumerable<string> segments = from key in nvc.AllKeys
from value in nvc.GetValues(key)
select string.Format("{0}={1}",
WebUtility.UrlEncode(key),
WebUtility.UrlEncode(value));
return "?" + string.Join("&", segments);
}
}
您可以使用此扩展来构建查询字符串,如下所示:
// Initialise the collection with values.
var values = new NameValueCollection {{"Key1", "Value1"}, {"Key2", "Value2"}};
// Or use the Add method, if you prefer.
values.Add("Key3", "Value3");
// Build a Uri using the extension method.
var url = new Uri("http://baseurl.com/" + values.ToQueryString());