带字符串值的HttpClient帖子c#

时间:2018-06-01 05:53:06

标签: c# post httpclient

我正在尝试使用以下代码发布请求,我有这个代码失败(服务器抱怨错误的请求,因为我无法控制服务器所以不知道服务器做了什么。)

private static readonly HttpClient client = new HttpClient();     
var values = new Dictionary<string, string>{
                    { "x", "value" }};
var content  = new FormUrlEncodedContent(values);
var response = await client.PostAsync(postUrl, content);

然后我有这个代码可以运行

private static readonly HttpClient client = new HttpClient();     
var values = new Dictionary<string, string>{
                    { "x", "\"value\"" }};
var content = new FormUrlEncodedContent(values);
var response = await client.PostAsync(postUrl, content);

唯一的区别是我的价值额外增加了""。任何人都可以请它为什么会发生?或者,如果我应该使用别的东西?

2 个答案:

答案 0 :(得分:1)

在有效的那个中,你正在逃避引号。这就是它的功能。这意味着很可能该值由空格分隔。也就是说,它包含两个单词。通常,您必须对值进行url编码,或者只是将其保留在引号中。因此,当您使用/“转义引号时,您将其与引号一起发送到服务器,因此它正在运行。

答案 1 :(得分:1)

让我们考虑这个示例程序。

static void Main(string[] args)
{
    Show(new Dictionary<string, string> { { "x", "value" } });
    Show(new Dictionary<string, string> { { "x", "\"value\"" } });
}

private static async void Show(Dictionary<string, string> values)
{
    var content = new FormUrlEncodedContent(values);
    var body = await content.ReadAsStringAsync();
    Console.WriteLine(body);
}

输出是: x=value x=%22value%22

在第一种情况下,当服务器读取正文时,它会看到x=value,而value不是字符串。