HttpClient Post со строковыми значениями c # - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь опубликовать запрос со следующим кодом, у меня этот код не работает (сервер жалуется на неверный запрос, поскольку я не контролирую сервер, поэтому не знаю, что делает сервер.)

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 голосов
/ 01 июня 2018

Давайте рассмотрим этот пример программы.

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 не является строкой.

0 голосов
/ 01 июня 2018

В той, которая работает, вы избегаете кавычек.Вот что позволяет ему работать.Это означает, что, скорее всего, значение разделено пробелом.То есть он содержит два слова.Обычно вам нужно сделать URL-кодировку для значения или вы просто держите его в кавычках.Поэтому, когда вы экранируете кавычки с помощью /“, вы отправляете его на сервер с кавычками, следовательно, оно работает.

...