带有其他参数的 C# HttpClient Post 字符串数组

Posted

技术标签:

【中文标题】带有其他参数的 C# HttpClient Post 字符串数组【英文标题】:C# HttpClient Post String Array with Other Parameters 【发布时间】:2015-04-22 08:13:14 【问题描述】:

我正在编写一个 C# api 客户端,对于大多数发布请求,我使用 FormUrlEncodedContent 发布数据。

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 将此数组与其他字符串参数一起发送。

【问题讨论】:

你为什么用List&lt;KeyValuePair&lt;string, string&gt;&gt;而不是Dictionary<string, string>? @Ksv3n 我必须发布一个字符串数组,而不是字符串值。 可以使用 JSON 吗? Will keyValues.Add(new KeyValuePair("directories", arr2.ToString() ));会工作吗? 如果你使用JSON,你可以简单地将任何数据结构序列化成以JSON格式表示的字符串。 【参考方案1】:

我遇到了同样的问题,我必须将一些常规字符串参数和一个字符串数组添加到 Http POST 请求正文中。

为此,您必须执行类似于以下示例的操作(假设您要添加的数组是一个名为 dirArray 的字符串数组):

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

//Add 'single' parameters
bodyProperties.Add(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());

【讨论】:

我使用 ExpandoObject 完成此操作并序列化为 json。

以上是关于带有其他参数的 C# HttpClient Post 字符串数组的主要内容,如果未能解决你的问题,请参考以下文章

使用带有表单编码参数和标头的 C# httpclient 发布

带有返回内容的 Task<string> 的 C# httpclient

发送带有 C# 错误 403 的文件和数据。CURL 没有错误

带有标题和内容c#的HttpClient PostAsync [重复]

必须使用 HttpClient C# 上传带有注册表单数据的图像

在 c# HttpClient 4.5 中发布 multipart/form-data