簡體   English   中英

如何在C#Windows應用商店應用(又名WinRT / Metro)中創建查詢字符串?

[英]How do I create a query string in a C# Windows Store App (a.k.a. WinRT/Metro)?

我想訪問帶有HTTP GET查詢字符串的Web資源,例如:

http://stackoverflow.com/search?q=search%20example&tab=relevance

在常規.NET Framework 4.5應用程序中,您可以使用System.Net.WebClient.QueryString

備注

QueryString屬性包含NameValueCollection實例,該實例包含作為查詢字符串附加到URI的名稱/值對。 QueryString屬性的內容前面帶有問號(?),名稱/值對通過&符號(&)分隔。

對於Store Apps,您甚至可以使用Windows.Foundation.WwwFormUrlDecoder解析它們。

但是為了創建查詢字符串,我在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; 

(來自: http//msdn.microsoft.com/en-us/library/system.uribuilder.queryv = vs.110.aspx

微軟真的暗示我應該用“=”和“&”自己加入我的參數嗎? 有沒有更好的方法?

目前,沒有一個我知道的可用。

創建反映原始.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> 
{
}

使用像:

var uri = UriExtensions.CreateUriWithQuery(new Uri("http://example.com"), 
    new NameValueCollection { { "key1", "value1" }, { "key2", "value2" }});

結果:

http://localhost/?key1=value1&key2=value2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM