如何在C#Windows应用商店应用程序(又称WinRT/Metro)中创建查询字符串?
我想使用HTTP GET查询字符串访问web资源,例如:如何在C#Windows应用商店应用程序(又称WinRT/Metro)中创建查询字符串?,c#,.net,windows-runtime,windows-store-apps,url-encoding,C#,.net,Windows Runtime,Windows Store Apps,Url Encoding,我想使用HTTP GET查询字符串访问web资源,例如: http://stackoverflow.com/search?q=search%20example&tab=relevance 在常规的.NET Framework 4.5应用程序中,您可以使用: 备注 QueryString属性包含一个NameValueCollection实例,该实例包含作为查询字符串附加到URI的名称/值对。QueryString属性的内容前面有问号(?),名称/值对之间用符号(&)分隔 对于商店应用程序
http://stackoverflow.com/search?q=search%20example&tab=relevance
在常规的.NET Framework 4.5应用程序中,您可以使用:
备注
QueryString属性包含一个NameValueCollection实例,该实例包含作为查询字符串附加到URI的名称/值对。QueryString属性的内容前面有问号(?),名称/值对之间用符号(&)分隔
对于商店应用程序,您甚至可以使用解析
但对于创建查询字符串,我在MSDN中找到的最好的代码片段是:
UriBuilder baseUri = new UriBuilder("http://www.contoso.com/default.aspx?Param1=7890");
string queryToAppend = "param2=1234";
if (baseUri.Query != null && baseUri.Query.Length > 1)
baseUri.Query = baseUri.Query.Substring(1) + "&" + queryToAppend;
else
baseUri.Query = queryToAppend;
(发件人:)
微软真的是在暗示我应该将我的参数与“=”和“&”结合起来吗?难道没有更好的方法吗?目前,我还没有发现一种更好的方法 创建反映原始.NET功能的内容非常简单:
public static class UriExtensions
{
public static Uri CreateUriWithQuery(Uri uri, NameValueCollection values)
{
var queryStr = new StringBuilder();
// presumes that if there's a Query set, it starts with a ?
var str = string.IsNullOrWhiteSpace(uri.Query) ?
"" : uri.Query.Substring(1) + "&";
foreach (var value in values)
{
queryStr.Append(str + value.Key + "=" + value.Value);
str = "&";
}
// query string will be encoded by building a new Uri instance
// clobbers the existing Query if it exists
return new UriBuilder(uri)
{
Query = queryStr.ToString()
}.Uri;
}
}
public class NameValueCollection : Dictionary<string, string>
{
}
结果:
http://localhost/?key1=value1&key2=value2
谢谢可惜每个人都不得不“重新发明轮子”。。。我想知道为什么.NET团队决定使用它?也许他们不知道它实际使用的频率有多高。谢天谢地,实现起来并不复杂。
http://localhost/?key1=value1&key2=value2