How to build a query string for a URL in C#?

前端 未结 30 2938
借酒劲吻你
借酒劲吻你 2020-11-22 01:55

A common task when calling web resources from a code is building a query string to including all the necessary parameters. While by all means no rocket science, there are so

30条回答
  •  耶瑟儿~
    2020-11-22 02:33

    You can create a new writeable instance of HttpValueCollection by calling System.Web.HttpUtility.ParseQueryString(string.Empty), and then use it as any NameValueCollection. Once you have added the values you want, you can call ToString on the collection to get a query string, as follows:

    NameValueCollection queryString = System.Web.HttpUtility.ParseQueryString(string.Empty);
    
    queryString.Add("key1", "value1");
    queryString.Add("key2", "value2");
    
    return queryString.ToString(); // Returns "key1=value1&key2=value2", all URL-encoded
    

    The HttpValueCollection is internal and so you cannot directly construct an instance. However, once you obtain an instance you can use it like any other NameValueCollection. Since the actual object you are working with is an HttpValueCollection, calling ToString method will call the overridden method on HttpValueCollection, which formats the collection as a URL-encoded query string.

    After searching SO and the web for an answer to a similar issue, this is the most simple solution I could find.

    .NET Core

    If you're working in .NET Core, you can use the Microsoft.AspNetCore.WebUtilities.QueryHelpers class, which simplifies this greatly.

    https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.webutilities.queryhelpers

    Sample Code:

    const string url = "https://customer-information.azure-api.net/customers/search/taxnbr";
    var param = new Dictionary() { { "CIKey", "123456789" } };
    
    var newUrl = new Uri(QueryHelpers.AddQueryString(url, param));
    

提交回复
热议问题