Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C#Windows应用商店应用程序(又称WinRT/Metro)中创建查询字符串?_C#_.net_Windows Runtime_Windows Store Apps_Url Encoding - Fatal编程技术网

如何在C#Windows应用商店应用程序(又称WinRT/Metro)中创建查询字符串?

如何在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 GET查询字符串访问web资源,例如:

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