HttpValueCollection, который вы используете в своем примере, фактически не является тривиальным и использует множество других частей библиотеки System.Web для кодирования действительного URL-адреса http для вас. Вы можете извлечь источник для частей, которые вам нужны, но он, скорее всего, будет каскадом в нечто большее, чем вы думаете!
Если вы это понимаете и просто хотите что-то примитивное, потому что вы уже убедитесь, что ключи и значения закодированы правильно, проще всего просто свернуть свое.
Вот пример, в виде метода расширения для 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());
Попробуйте System.Uri: HTTP : //msdn.microsoft.com/pl-pl/library/system.uri%28v=vs.110%29.aspx –
Почему вы заботитесь о размере System.Web? его все равно уже развернуты в рамках – fixagon
здесь решение: http://stackoverflow.com/questions/14517798/append-values-to-query-string – lem2802