HttpUtility.ParseQueryString的反向函数

时间:2010-04-09 05:30:40

标签: asp.net asp.net-mvc query-string namevaluecollection

.Net的System.Web.HttpUtility类定义the following function以将查询字符串解析为NameValueCollection

public static NameValueCollection ParseQueryString(string query);

是否有任何相反的功能(即将NameValueCollection转换为查询字符串)?

5 个答案:

答案 0 :(得分:22)

System.Collections.Specialized.NameValueCollection NOT 支持此功能,但是派生的内部课程System.Web.HttpValueCollection DOES (通过覆盖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();

{{1}}

nameValueCollection.ToString()=“System.Collections.Specialized.NameValueCollection” httpValueCollection.ToString()=“a = b& c = d”

答案 1 :(得分:4)

NameValueCollection有一个自动ToString()方法,它会自动将所有元素作为查询字符串写出来。

你不需要自己编写。

var querystringCollection = HttpUtility.ParseQueryString("test=value1&test=value2");

var output = querystringCollection.ToString(); 

output =“test = value1& test = value2”

答案 2 :(得分:2)

我认为没有内置版本,但这里有一个如何实现http://blog.leekelleher.com/2008/06/06/how-to-convert-namevaluecollection-to-a-query-string/

的示例

答案 3 :(得分:2)

我发现UriBuilderHttpUtility类的组合符合我操作查询参数的要求。 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();

以上代码会生成网址字符串:http://example.com/something?param1=whatever&param2=whatever2&param3=whatever2

请注意,ToString()通过Uri属性,否则输出字符串将包含显式端口80。

能够使用框架类完成所有这些并且不必编写我们自己的代码是很好的。

答案 4 :(得分:-1)

以下是我一直使用的两个非常有用的功能:

    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;
    }