.Net привязка базовой модели JSON Post to Web API
Просто начал новый проект с использованием .NET Core. Добавлен мой контроллер веб-API и связанный метод. Используя Postman, я создал объект JSON и разместил его в своем методе контроллера. Имейте в виду, что объект JSON точно соответствует параметру Object в методе контроллера.
В режиме отладки я вижу объект, он не нулевой, свойства есть, ОДНАКО значения по умолчанию устанавливаются по умолчанию для их типов представителей, 0
для int
и т.д.
Я никогда не видел такого поведения раньше... поэтому я взял точно такой же код и объект и реплицировал его в проекте MVC с контроллером Web API 2, и он отлично работает.
Чего мне не хватает, могу ли я не POST JSON и привязку модели в .NET Core?
Читая эту статью, кажется, я не могу, если я не отправлю как форму POST или как строку запроса, которая, кстати, работает нормально.
https://lbadri.wordpress.com/2014/11/23/web-api-model-binding-in-asp-net-mvc-6-asp-net-5/
JSON:
{
"id": "4",
"userId": "3"
"dateOfTest": "7/13/2017"
}
Метод:
[HttpPost]
[Route("test1")]
[AllowAnonymous]
public IActionResult Test(Class1 data)
{
return Ok();
}
Ответы
Ответ 1
Вы должны отметить свой параметр как исходящий из тела атрибутом FromBody следующим образом:
[HttpPost]
[Route("test1")]
[AllowAnonymous]
public IActionResult Test([FromBody] Class1 data)
{
return Ok();
}
Вам нужно убедиться, что вы используете приложение /json в качестве своего типа контента из Postman:
![Postman application/json]()
В результате чего:
![json POST action]()
Удостоверьтесь, что ваши разработчики недвижимости также являются общедоступными:
public class Person
{
public String Name;
public Int32 Age;
}
Ответ 2
Я несколько часов боролся с этой проблемой, и ни один из существующих решений не работал для меня, но оказалось, что у меня не было открытого конструктора без параметров для класса входящего экземпляра. В этом случае Class1
имел только защищенные конструкторы, и параметр всегда был нулевым, несмотря ни на что. Надеюсь, это поможет кому-то.
Ответ 3
set;} для каждого атрибута в моем классе как так:
public class LogString{
public string val {get; set;}
public string data {get; set;}
}
В остальном было так же:
[HttpPost]
public void Post([FromBody] LogString message)
{
Console.WriteLine(message.val);
}
После добавления это начало работать.