web-dev-qa-db-fra.com

Paramètre de poste MVC Asp.net de base toujours null

Je suis nouveau sur MVC.

J'ai créé un projet avec le noyau MVC doté d'un contrôleur. Ce contrôleur a des méthodes d’action Get et Post. Si je transmets des données à une méthode Get à l'aide d'une chaîne de requête, cela fonctionne bien, mais lorsque je transmets une méthode JSON complexe à une méthode de publication, il me montre toujours la valeur null.

Voici ce que je fais:

Demande de post

URL: http://localhost:1001/api/users
Content-Type: application/json
Body: 
{
   "Name":"UserName",
   "Gender":"Gender of the user",
   "PhoneNumber":"PhoneNumber of the user"
}

Voici la méthode d'action Post

[HttpPost]
[Route("api/users")]
public async Task<IActionResult> Post([FromBody]User newUser)
{
   ...
}

Lorsque post request est appelée, alors newUser me montre toujours null. Et si je supprime l'attribut [FromBody], je reçois l'objet newUser mais tous ses champs sont nuls.

S'il vous plaît, aidez-moi et guidez-moi dans ce numéro.

&EACUTE;DIT&EACUTE;

Voici ma classe User

public class User{

   public int Id { get; set; }
   public string Name { get; set; }
   public string Gender { get; set; }
   public string PhoneNumber { get; set; }
}

Je l'avais fait comme décrit ici pour les données JSON, mais reçoit toujours null. 

18
Ravi Patel

Cela peut être dû à la manière dont les valeurs NULL sont gérées. Définissez NullValueHandling sur Ignore dans AddJsonOptions et voyez si cela fonctionne.

public void ConfigureServices(IServiceCollection services)
{
    services
        .AddMvc()
        .AddJsonOptions(jsonOptions=>
        {
            jsonOptions.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
        });
}
13
bvoleti

Notez la méthode originale Post([FromBody] User newUser)

Pour les futurs lecteurs de Google, le même problème pourrait survenir si la méthode était Post(User newUser)

Notez le manque de [FromBody]. Ceci diffère des versions précédentes de MVC où ces paramètres étaient généralement déduits.

Si vous êtes un développeur MVC5 existant qui trouve cette page concernant AspNetCore.MVC , assurez-vous de vérifier que vous avez bien décoré [FromBody] le cas échéant.

10
Chris Marisic

J'ai créé un nouveau projet ASP.NET Core, ajouté vos fonctionnalités et cela fonctionne. S'il vous plaît, checkout ce projet sur github.

Voir également la capture d'écran du journal avec communication simple avec ce contrôleur depuis la console du navigateur: Sortie de la console

2
Roman Zinnatov

Êtes-vous sur Microsoft.AspNetCore.Mvc 1.0.0?

Si tel est le cas, essayez d’envoyer cet objet en tant que corps de votre demande (propriétés chamel)

{
   "name":"UserName",
   "gender":"Gender of the user",
   "phoneNumber":"PhoneNumber of the user"
}
0
steamrolla