Подтвердить что ты не робот

Основной параметр 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-данных, но все равно получает нуль.

4b9b3361

Ответ 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

Для этого пользовательский класс должен иметь конструктор без параметров без параметров.