2015-11-22 40 views
0

hello我想在HttpWebRequest url中傳遞可變數量的參數。我的做法到目前爲止這 -如何在url中傳遞可變數量的參數

public static async Task<ObservableCollection<Anime>> RequestsAnime(string accessToken, int page = 0, params string[] optionals) // All Anime 
    { 
     JsonWebClient client = new JsonWebClient(); 

     string baseUri = "https://anilist.co/api/browse/anime?access_token=" + accessToken; 
     string completeUri = ""; 

     string parameters = ""; 

     if (optionals != null) 
     { 
      parameters = CollectionUtils.ToStringFromArray(optionals); 
      completeUri = baseUri + parameters; 
     } 

     if (page != 0) 
     { 
      completeUri = baseUri + "&page=" + page; 
     } 
     HttpWebRequest reqForToken = HttpWebRequest.CreateHttp(completeUri); 
     reqForToken.Method = "GET"; 
     var respToken = await client.DoRequestJsonAsync<ObservableCollection<Anime>>(reqForToken); 

     return respToken; 
    } 

ToStringFromArray功能

public static string ToStringFromArray(string[] arrayString) 
    { 
     string result = string.Join("", arrayString); 
     return result; 
    } 

RequestsAnime調用

string[] ds = new string[] { "&status", "=active", "&season","=fall" }; 
var nm = await Requests.CreateMultipleTasksAsync(ds); 

CreateMultipleTaskAsync調用

public static async Task<ObservableCollection<Anime>> CreateMultipleTasksAsync(int page=0 ,params string[] optionals) 
    { 
     Task<Auth> download1 = RequestsAuth(); 

     Auth length1 = await download1; 

     Task<ObservableCollection<Anime>> download2 = RequestsAnime(download1.Result.Access_token,page, optionals); 

     var animeList = await download2; 

     return animeList; 
    } 

我知道它笨拙的方式。我需要知道更好的解決方案。我的目標是 - 在URL中

  1. 通行證的參數變量量
  2. 追加參數與「&」和「=」

回答

0

我建議你把你所有的查詢字符串參數在Dictionary

var parameters = new Dictionary<string, string> 
{ 
    { "status", "active" }, 
    { "season", "fall" } 
}; 

你可以調用下面的方法產生一個有效的查詢字符串(通知來電:

string CreateQueryString(Dictionary<string, string> parameters) 
{ 
    return String.Join("&", parameters 
     .Select(param => String.Format("{0}={1}", 
      Uri.EscapeDataString(param.Key), 
      Uri.EscapeDataString(param.Value))) 
     .ToArray()); 
} 

查詢字符串就追加到你baseUri

completeUri = baseUri + "&" + CreateQueryString(parameters);