Я пытаюсь вызвать API с PostAsJsonAsync
, но он не работает так, как я ожидал.
Repo:
- Создание проекта ASP.NET WebAPi (.NET Framework 4.7.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);
}
Создайте консольное приложение для использования 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);
}
Запустите 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
не работает так, как мне кажется?