没有System.Web依赖的HttpUtility.ParseQueryString的替代?

我希望能够通过将键和值添加到某个帮助程序类来构建URL查询字符串,并将其作为URL查询返回。 我知道这可以做到,就像这样:

var queryBuilder= HttpUtility.ParseQueryString("http://baseurl.com/?"); queryBuilder.Add("Key", "Value"); string url = queryBuilder.ToString(); 

这正是我追求的行为。 但是,这个类存在于着名的大型System.Web ,我宁愿不为此引入整个库。 某处有替代品吗?

您在示例中使用的HttpValueCollection实际上并不简单,并且利用System.Web库的大量其他部分为您编码有效的http url。 可以提取所需部件的来源,但它可能会比您想象的更多级联!

如果您理解并且只是想要一些原始的东西,因为您已经确保键和值被正确编码,那么最简单的方法就是自己滚动。

这是一个示例,以NameValueCollection的扩展方法的forms:

 public static class QueryExtensions { public static string ToQueryString(this NameValueCollection nvc) { IEnumerable 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());