У меня проблемы с [FromBody] в моем методе POST, всегда имеющим значение null.
Я воспроизвел его с помощью минимального приложения в VS2019:
- Создать проект ASP. NET Веб-приложение (. NET Framework)
- Выбрать веб-API
Это создает скелет проекта с классом ValuesController со следующим методом:
public void Post([FromBody] string value)
{
}
Я запускаю этот проект в «IIS Express (Google Chrome)» и просматриваю https://localhost: 44358 / api / values, который отлично работает и срабатывают точки останова в методе Get.
Затем я пытаюсь выполнить POST-данные с помощью cUrl:
curl --header "Content-Type: application/json" --url https://localhost:44358/api/values --data "wibble"
Точка останова достигнута в VS2019, но значение равно нулю (я ожидал "колебания").
I в содержимом запроса можно увидеть, что длина равна 6, и это меняется в зависимости от длины строки, которую я передаю в данные, но вызовы для ее чтения возвращают пустые строки или байт [] нулей.
this.Request.Content.ReadAsStringAsync().Result ""
this.Request.Content.Headers.ContentType {application/json}
this.Request.Content.Headers.ContentLength 6
Попытка выполнить POST из другого C# приложения с помощью HttpClient также дает те же результаты.
* 1 026 * Что мне не хватает? Тот факт, что проблема возникает в приложении-скелете по умолчанию, и все не жалуются на это, предполагает, что это должно быть что-то очевидное, но ...
ОБНОВЛЕНИЕ
Я вижу ту же проблему в Fiddler, но заставил ее работать с HttpClient, используя:
client.PostAsync<string>(url, "wibble", new JsonMediaTypeFormatter()).Result;
Но следующее не работает (получено как null):
client.PostAsync(url, new StringContent("wibble", Encoding.UTF8), new JsonMediaTypeFormatter()).Result;