web-dev-qa-db-fra.com

Liaison de modèles JET Post Web à l'API Web

Vient de commencer un nouveau projet utilisant .NET Core. Ajout de mon contrôleur API Web et de la méthode associée. En utilisant Postman, j'ai créé un objet JSON et l'ai posté sur ma méthode de contrôleur. Gardez à l'esprit que l'objet JSON correspond exactement au paramètre Object de la méthode du contrôleur.

En mode débogage, je peux voir l'objet, il n'est pas nul, les propriétés sont là, TOUTEFOIS, les valeurs prop sont définies par défaut sur leurs types de représentants, 0 pour int, etc.

Je n'avais jamais vu ce comportement auparavant… alors j'ai pris exactement le même code et le même objet et les ai répliqués dans un projet MVC avec un contrôleur Web API 2 et cela fonctionne parfaitement.

Qu'est-ce qui me manque, je ne peux pas POST JSON et le modèle se lier dans .NET Core?

En lisant cet article, il semble que je ne peux pas le faire sauf si j'envoie le formulaire POST ou les vars de chaînes de requêtes qui, d'ailleurs, fonctionnent bien.

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"
}

Méthode:

[HttpPost]
[Route("test1")]
[AllowAnonymous]
public IActionResult Test(Class1 data)
{
    return Ok();
}
5
Mike Anderson

Vous devez marquer votre paramètre comme provenant du corps avec l'attribut FromBody comme ceci:

[HttpPost]
[Route("test1")]
[AllowAnonymous]
public IActionResult Test([FromBody] Class1 data)
{
    return Ok();
}

Vous devez vous assurer que vous utilisez application/json comme type de contenu de Postman:

 Postman application/json

Résultant en:

 json POST action

Assurez-vous que vos fondateurs de propriété sont également publics:

public class Person
{
    public String Name;
    public Int32 Age;
}
15
Matt

Je suis aux prises avec ce problème depuis plusieurs heures et aucune des solutions existantes ne fonctionnait pour moi, mais il est apparu que je n'avais aucun constructeur public sans paramètre pour la classe d'instance entrante. Dans ce cas, Class1 n'avait que des constructeurs protégés et le paramètre était toujours nul, quoi qu'il en soit. J'espère que ça aide quelqu'un.

0
Grumpy Android