2016-09-17 2 views
0

У меня возникли проблемы с вызовом API. Мне нужно отправить данные сообщения, содержащие 2 вещи: идентификатор и массив int. Я пробовал много вещей, все из-за ошибок или просто не отправляя данные в правильном направлении. Все ответы, которые я нашел, не обрабатывают тот факт, что я хочу отправить 2 разных типа данных.C#: параметры протокола POST HttpClient - одна строка и массив int

С другой стороны, у меня есть:

Call<DefaultResponseList> someMethod(@Field("parm1") String parm1, @Field("parm2[]") ArrayList<Integer> parm2); 

Я пробовал:

List<int> ints1 = new List<int>(); 
ids.Add(1); 
ids.Add(2); 
ids.Add(3); 

var values = new List<KeyValuePair<string, object>> 
{ 
    new KeyValuePair<string, object>("parm1", "lkdjfowejfd123"), 
    new KeyValuePair<string, object>("parm2", ints1) 

}; 

var httpClient = new HttpClient(new HttpClientHandler()); 
HttpResponseMessage response = await httpClient.PostAsync(someUrl, new FormUrlEncodedContent(values)); 
response.EnsureSuccessStatusCode(); 

string data = await response.Content.ReadAsStringAsync();    
+0

Вы должны знать среду 'someUrl', а затем упорядочивать свои значения в соответствии с этой информацией. Ex, если целевая среда - это сервер Apache/PHP, ваши ключи должны быть похожими на param2 [], поскольку для классических значений envrionment ASP.NET должно быть такое же ключевое имя с возникновением, и если его ASP.NET MVC ваш ключ должен содержать индексы, такие как param2 [0 ], param2 [1] и т. д. –

+0

Целевая среда - сервер Apache/PHP. – Miljkoyu

ответ

2

Я решил проблему. Спасибо Cihan Uygun за его комментарии.

List<int> ids = new List<int>(); 
ids.Add(1); 
ids.Add(2); 
ids.Add(3); 

var values = new List<KeyValuePair<string, string>> 
{ 
    new KeyValuePair<string, string>("parm1", "lkdjfowejfd123") 
}; 

int counter = 0; 
foreach (int i in ids) 
{ 
    values.Add(new KeyValuePair<string, string>("parm2[" + counter.ToString() + "]", i.ToString())); 
    counter++; 
} 

var httpClient = new HttpClient(new HttpClientHandler()); 
HttpResponseMessage response = await httpClient.PostAsync(urlSaveRegions, new FormUrlEncodedContent(values)); 
response.EnsureSuccessStatusCode(); 

string data = await response.Content.ReadAsStringAsync();