C# HttpClient PostAsync无效的Post格式

C# HttpClient PostAsync无效的Post格式,c#,httpclient,C#,Httpclient,我试图使用HttpClient的PostAsync登录到一个网站;但是它总是失败,当我使用WireShark跟踪连接时,我发现它错误地发布了数据 代码 期望 现实 我知道这是可行的: var values = new List<KeyValuePair<string, string>>(); values.Add(new KeyValuePair<string, string>("Item1", "Value1")); values.Add(new KeyV

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

代码 期望 现实 我知道这是可行的:

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)
}
var值=新列表();
添加(新的KeyValuePair(“Item1”、“Value1”);
添加(新的KeyValuePair(“Item2”、“Value2”);
添加(新的KeyValuePair(“Item3”、“Value3”);
使用(var内容=新FormUrlEncodedContent(值))
{
client.PostAsync(postUri,content.Result)
}

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

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())
};
var content=新列表
{
新的KeyValuePair(“value1”,data1.Trim()),
新的KeyValuePair(“value2”,data2.Trim()),
新的KeyValuePair(“value3”,data3.Trim())
};

在我看来,这是最好的选择:

var variables = new Dictionary<string, string>() {
    { "value1", value1 },
    { "value2", value2 }
};
var content = new FormUrlEncodedContent(variables);
var variables=newdictionary(){
{“value1”,value1},
{“value2”,value2}
};
var内容=新的FormUrlEncodedContent(变量);

字典在加载时可以用来检查重复的值,除非你需要重复的键…

是否有可能在url编码为
+
的参数名后有空格?@Jason p我会重新检查,但我看不出这与我发布的代码有什么区别,但我会尝试同意,没有区别,这就是重点,我知道这段代码是有效的。您应该查找值之间的差异:):D错误是我而不是httpClient:D,正如Jason P所说,我的参数名中有一个空格。无论如何,非常感谢你的帮助。
value1=123456&value2=123456&value3=123456
//It adds strange += which makes the post fail...
value1=123456&value2+=123456&value3+=123456
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)
}
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())
};
var variables = new Dictionary<string, string>() {
    { "value1", value1 },
    { "value2", value2 }
};
var content = new FormUrlEncodedContent(variables);