HttpClient PostAsync无效的帖子格式

时间:2013-07-31 15:00:51

标签: c# httpclient

我正在尝试使用HttpClient的PostAsync登录网站;但总是失败,当我使用WireShark跟踪连接时,我发现它错误地发布了数据

代码

var content = new FormUrlEncodedContent(new[] 
{
    new KeyValuePair<string, string>("value1", data1),
    new KeyValuePair<string, string>("value2", data2),
    new KeyValuePair<string, string>("value3", data3)
});

var content = new List<KeyValuePair<string, string>>
{
    new KeyValuePair<string, string>("value1", data1), 
    new KeyValuePair<string, string>("value2", data2), 
    new KeyValuePair<string, string>("value3", data3)
};

使用

httpClient.PostAsync(postUri, content)

期望

value1=123456&value2=123456&value3=123456

现实

//It adds strange += which makes the post fail...
value1=123456&value2+=123456&value3+=123456

3 个答案:

答案 0 :(得分:4)

我知道这有效:

var values = new List<KeyValuePair<string, string>>();

values.Add(new KeyValuePair<string, string>("Item1", "Value1"));
values.Add(new KeyValuePair<string, string>("Item2", "Value2"));
values.Add(new KeyValuePair<string, string>("Item3", "Value3"));

using (var content = new FormUrlEncodedContent(values))
{
    client.PostAsync(postUri, content).Result)
}

答案 1 :(得分:1)

修剪可能的空格的参数。空格导致+

var content = new List<KeyValuePair<string, string>>
{
    new KeyValuePair<string, string>("value1", data1.Trim()), 
    new KeyValuePair<string, string>("value2", data2.Trim()), 
    new KeyValuePair<string, string>("value3", data3.Trim())
};

答案 2 :(得分:0)

在我看来,这更好看:

var variables = new Dictionary<string, string>() {
    { "value1", value1 },
    { "value2", value2 }
};
var content = new FormUrlEncodedContent(variables);

并且字典可以用于在加载时检查重复值,除非您需要重复键...