PostAsJsonAsync не работает должным образом - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь вызвать API с PostAsJsonAsync, но он не работает так, как я ожидал.

Repo:

  1. Создание проекта ASP.NET WebAPi (.NET Framework 4.7.2)
  2. Заменить метод Post в ValuesController на

    // POST api/values
    public async Task<IHttpActionResult> Post(string[] array)
    {
        var suffix = array == null ? "is null" : $"has {array.Length} elements";
        var message = $"`array` {suffix}";
        return Ok(message);
    }
    
  3. Создайте консольное приложение для использования API.

    static async Task Main(string[] args)
    {
        const string url = "http://localhost:6757/api/values";
        var value = new List<string> { "a", "b" };
        var client = new HttpClient();
    
        var response = await client.PostAsJsonAsync(url, value);
        var message = await response.Content.ReadAsStringAsync();
        Console.WriteLine(message);
    
        // Do what I think PostAsJsonAsync is essentially doing
        var json = JsonConvert.SerializeObject(value);
        var content = new StringContent(json, Encoding.UTF8, "application/json");
        response = await client.PostAsync(url, content);
        message = await response.Content.ReadAsStringAsync();
        Console.WriteLine(message);
    }
    
  4. Запустите WebApi, а затем консольное приложение

ОЖИДАЕМЫЙ ВЫХОД:

"array имеет 2 элемента"

"array имеет 2 элемента"

АКТУАЛЬНЫЙ ВЫХОД:

"array is null"

"array имеет 2 элемента"

Поэтому я изменил метод Post для сравнения строк содержимого по запросу.

public async Task<IHttpActionResult> Post()
{
    var value = await Request.Content.ReadAsStringAsync();
    return Ok();
}

Они оба установили value в ["a","b"].

Так почему PostAsJsonAsync не работает так, как мне кажется?

...