[英]Best way to pass List in query string HttpClient.GetAsync()
我使用HttpClient.GetAsync()
方法。 我有一個類別列表,想在查詢字符串中傳遞它。
var categories = new List<int>() {1,2};
如何在查詢字符串中傳遞List<int>/List<string>
? 例如, https://example.com/api?categories=1,2
當然可以使用foreach
和StringBuilder
。 但是也許有更好的方法可以做到這一點?
例如,使用.PostAsync()和json內容非常方便:
var categories = new List<int>() {1,2}; //init List
var parametrs = new Dictionary<string, object>();
parametrs.Add("categories", categories);
string jsonParams = JsonConvert.SerializeObject(parametrs); // {"categories":[1,2]}
HttpContent content = new StringContent(jsonParams, Encoding.UTF8, "application/json");
var response = await httpClient.PostAsync(new Uri("https://example.com"), content);
PS我使用Windows Phone 8。
如果准備好依賴支持URI模板的庫,例如我創建的庫( http://www.nuget.org/packages/Tavis.UriTemplates/ ),那么您將獲得創建URI的各種靈活性。 完整規格在這里RFC6570
您首先創建一個URI模板,
var template = new UriTemplate("http://example.com/api{?categories}");
您可以使用簡單字符串,字符串列表或字符串鍵/值對字典來設置參數。
var idList = new string[] {"1", "4", "5", "7", "8"};
template.SetParameter("id",idList);
然后您可以解析參數以創建完整的URI
var uri = template.Resolve();
Debug.Assert(uri == "http://example.com/api?categories=1,4,5,7,8");
令人高興的是,如果您有其他查詢參數,或者有需要編碼的字符,則URI模板處理器也將為您處理所有這些問題。
這個擴展的測試套件使您對所支持的一些瘋狂的東西有所了解。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.