2015-11-22 3 views
0

Привет Я пытаюсь передать переменное количество параметров внутри URL-адреса HttpWebRequest. Мой подход до сих пор является this-Как передать переменное количество параметров внутри 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 Calling

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; 
    } 

Я знаю его неуклюжий способ. Мне нужно знать лучшее решение. Мои цели являются-

  1. Пасс переменное количество параметров внутри URL
  2. Append параметры с «&» и «=»

ответ

0

Я хотел бы предложить вам поместить все параметры строки запроса в Dictionary:

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

Вы можете затем вызвать следующий метод генерации правильную строку запроса (обратите внимание на вызовы Uri.EscapeDataString:

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); 
Смежные вопросы