我正在尝试使用以下代码发布请求,我有这个代码失败(服务器抱怨错误的请求,因为我无法控制服务器所以不知道服务器做了什么。)
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);
唯一的区别是我的价值额外增加了""
。任何人都可以请它为什么会发生?或者,如果我应该使用别的东西?
答案 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
不是字符串。