没有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());