Обратная функция HttpUtility.ParseQueryString
.Net System.Web.HttpUtility класс определяет следующая функция для разбора строки запроса в NameValueCollection:
public static NameValueCollection ParseQueryString(string query);
есть ли какая-либо функция, чтобы сделать обратный (т. е. конвертировать NameValueCollection в строку запроса)?
5 ответов
NameValueCollection имеет автоматический метод ToString (), который автоматически запишет все ваши элементы в виде строки запроса.
вам не нужно писать свой собственный.
var querystringCollection = HttpUtility.ParseQueryString("test=value1&test=value2");
var output = querystringCollection.ToString(); 
output = "test=value1&test=value2"
System.Collections.Specialized.NameValueCollection тут не поддерживает это, но производный внутренний класс System.Web.HttpValueCollection тут (путем переопределения ToString()).
к сожалению (будучи внутренним), вы не можете создать экземпляр этого класса напрямую, но один возвращается HttpUtility.ParseQueryString() (и вы можете назвать это с String.Empty, а не Null).
после HttpValueCollection, вы можете заполнить его с оригинального NameValueCollection по телефону Add(), прежде чем, наконец, вызов ToString(). 
var nameValueCollection = new NameValueCollection {{"a","b"},{"c","d"}};
var httpValueCollection = System.Web.HttpUtility.ParseQueryString(String.Empty);
httpValueCollection.Add(nameValueCollection);
var qs = httpValueCollection.ToString();
namevaluecollection, который.ToString () = "System.Коллекции.Специализированный.Namevaluecollection, который" httpValueCollection.ToString () = "a=b&c=d"
Я не думаю, что есть встроенный, но вот пример того, как реализовать http://blog.leekelleher.com/2008/06/06/how-to-convert-namevaluecollection-to-a-query-string/
я обнаружил, что комбинация UriBuilder и HttpUtility классы отвечают моим требованиям для управления параметрами запроса. The Uri класс сам по себе недостаточно, тем более что его Query свойство доступно только для чтения.
var uriBuilder = new UriBuilder("http://example.com/something?param1=whatever");
var queryParameters = HttpUtility.ParseQueryString(uriBuilder.Query);
queryParameters.Add("param2", "whatever2");
queryParameters.Add("param3", "whatever2");
uriBuilder.Query = queryParameters.ToString();
var urlString = uriBuilder.Uri.ToString();
приведенный выше код приводит к строке URL: http://example.com/something?param1=whatever¶m2=whatever2¶m3=whatever2
обратите внимание, что ToString () проходит через Uri свойство, иначе выходная строка будет иметь явный порт 80 в нем.
приятно иметь возможность делать все это с помощью классов framework и не писать собственный код.
здесь 2 очень полезные функции, которые я использую все время:
    private string GetQueryStringParameterValue(Uri url, string key)
    {
        return HttpUtility.ParseQueryString(url.Query.TrimStart('?'))[key];
    }
    private Uri SetQueryStringParameterValue(Uri url, string key, string value)
    {
        var parameters = HttpUtility.ParseQueryString(url.Query.TrimStart('?'));
        parameters[key] = value;
        var uriBuilder = new UriBuilder(url) { Query = parameters.ToString() };
        return uriBuilder.Uri;
    }
