Основной параметр MVC для Asp.net всегда равен нулю
Я новичок в ядре MVC.
Я создал проект с ядром MVC с контроллером. Этот контроллер имеет методы Get и Post. Если я передаю данные методу Get с использованием строки запроса, он отлично работает, но когда я передаю сложный JSON для отправки метода, он всегда показывает мне null.
Вот что я делаю:
Почтовый запрос
URL: http://localhost:1001/api/users
Content-Type: application/json
Body:
{
"Name":"UserName",
"Gender":"Gender of the user",
"PhoneNumber":"PhoneNumber of the user"
}
Вот метод действия post
[HttpPost]
[Route("api/users")]
public async Task<IActionResult> Post([FromBody]User newUser)
{
...
}
Когда вызывается почтовый запрос, newUser всегда показывает мне null. И если я удалю атрибут [FromBody], тогда я получаю объект newUser, но все его поля имеют нулевое значение.
Пожалуйста, помогите мне и посоветуйте мне эту проблему.
EDITED
Вот мой Пользовательский класс
public class User{
public int Id { get; set; }
public string Name { get; set; }
public string Gender { get; set; }
public string PhoneNumber { get; set; }
}
Я сделал то же, что описано здесь для json-данных, но все равно получает нуль.
Ответы
Ответ 1
Это может быть из-за того, как обрабатываются пустые значения. Установите NullValueHandling для игнорирования в AddJsonOptions и посмотрите, работает ли это.
public void ConfigureServices(IServiceCollection services)
{
services
.AddMvc()
.AddJsonOptions(jsonOptions=>
{
jsonOptions.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
});
}
Ответ 2
Обратите внимание на оригинальный метод Post([FromBody] User newUser)
Для будущих читателей из Google эта проблема может возникнуть, если метод был Post(User newUser)
Обратите внимание на недостаток [FromBody]
. Это отход от предыдущих версий MVC, где эти параметры обычно были выведены.
Если вы являетесь существующим разработчиком MVC5, который находит эту страницу в отношении AspNetCore.MVC, убедитесь, что у вас есть [FromBody]
, где это уместно.
Ответ 3
Я создал новый проект ASP.NET Core, добавил вашу функциональность, и он работает. Пожалуйста, проверьте этот проект на github.
Также см. скриншот журнала с простой связью с этим контроллером с консоли браузера: Консольный выход
Ответ 4
Вы находитесь на Microsoft.AspNetCore.Mvc 1.0.0
?
Если вы хотите, попробуйте отправить этот объект в качестве своего тела в запросе (свойства, сохраненные верблюдом):
{
"name":"UserName",
"gender":"Gender of the user",
"phoneNumber":"PhoneNumber of the user"
}
Ответ 5
Для этого пользовательский класс должен иметь конструктор без параметров без параметров.