簡體   English   中英

在查詢字符串HttpClient.GetAsync()中傳遞List的最佳方法

[英]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

當然可以使用foreachStringBuilder 但是也許有更好的方法可以做到這一點?

例如,使用.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.

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