.Net的System.Web.HttpUtility
类定义the following function以将查询字符串解析为NameValueCollection
:
public static NameValueCollection ParseQueryString(string query);
是否有任何相反的功能(即将NameValueCollection
转换为查询字符串)?
答案 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)
我发现UriBuilder
和HttpUtility
类的组合符合我操作查询参数的要求。 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¶m2=whatever2¶m3=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;
}