2015-04-22 4 views
2

Я пишу клиент C# api, и для большинства почтовых запросов я использовал FormUrlEncodedContent для публикации данных.C# HttpClient Post String Array с другими параметрами

List<KeyValuePair<string, string>> keyValues = new List<KeyValuePair<string, string>>(); 

keyValues.Add(new KeyValuePair<string, string>("email", email)); 
keyValues.Add(new KeyValuePair<string, string>("password", password)); 

var content = new FormUrlEncodedContent(keyValues); 

Но теперь мне нужно разместить строковый массив как один параметр. Некоторые вещи, как показано ниже.

string[] arr2 = { "dir1", "dir2"}; 

Как отправить этот массив вместе с другими строковыми параметрами с помощью C# HttpClient.

+0

Почему вы используете 'List < KeyValuePair > 'вместо [Dictionary ] (https://msdn.microsoft.com/en-us/library/xfhwa508%28v=vs.110%29.aspx)? – Eminem

+0

@ Ksv3n Мне нужно разместить строковый массив, а не строковое значение. – Yasitha

+0

Использует JSON возможность? –

ответ

6

Я столкнулся с той же проблемой, когда мне пришлось добавить как обычные строковые параметры, так и строковый массив в тело запроса Http POST.

Для этого вам нужно сделать что-то похожее на примере ниже (Предполагается, что массив, который вы хотите добавить, массив строк с именем dirArray):

//Create List of KeyValuePairs 
List<KeyValuePair<string, string>> bodyProperties = new List<KeyValuePair<string, string>>(); 

//Add 'single' parameters 
bodyPropertiesAdd(new KeyValuePair<string, string>("email", email)); 
bodyProperties.Add(new KeyValuePair<string, string>("password", password)); 

//Loop over String array and add all instances to our bodyPoperties 
foreach (var dir in dirArray) 
{ 
    bodyProperties.Add(new KeyValuePair<string, string>("dirs[]", dir)); 
} 

//convert your bodyProperties to an object of FormUrlEncodedContent 
var dataContent = new FormUrlEncodedContent(bodyProperties.ToArray()); 
+0

Я сделал это с помощью ExpandoObject и сериализовался в json. – Yasitha