Post FromBody Toujours Null
J'ai une nouvelle API que je suis en train de construire avec ASP.NET de Base, et je ne peux pas obtenir toutes les données POST ed à un point de terminaison.
Voici ce que l'extrémité ressemble à:
[HttpPost]
[Route("StudentResults")]
public async Task<IActionResult> GetStudentResults([FromBody]List<string> userSocs, [FromBody]int collegeId)
{
var college = await _collegeService.GetCollegeByID(collegeId);
//var occupations = await _laborMarketService.GetOccupationProgramsBySocsAndCollege(userSocs, college);
return Ok();
}
Et voici ce que ma charge que je suis de l'envoyer par Facteur ressemble:
{
"userSocs": [
"291123",
"291171",
"312021",
"291071",
"152031",
"533011"
],
"collegeId": 1
}
Je suis en veillant à ce que j'ai postier définir comme un POSTE, avec Content-Type application/json
. Ce que je fais mal?
OriginalL'auteur Alex Kibler | 2017-02-16
Vous devez vous connecter pour publier un commentaire.
Vous obtenez toujours
null
parce que vous avez besoin pour encapsuler tous vos post variables à l'intérieur d'un seul objet. Comme ceci:et puis
Si vous envoyez les paramètres via le formulaire ou de requête get. Vous ne pouvez avoir qu'un seul modèle dans votre corps, de sorte que toute non-type de base (int, string, etc.) sera sérialisé pour le premier modèle. Dans ASP.NET de Base (indepentent de 4,5 ou .NET de Base) vous ne pouvez avoir qu'un seul FromBody (en WebApi 2.x il était implicite), parce que WebAPI et MVC sont maintenant fusionnés dans un cadre unique, où ils étaient différents de ceux précédemment
OriginalL'auteur
Si le modèle est null, vérifiez:
1) Où les données sont envoyées: corps, la forme? et sur cette base ajouter le décorateur à l'action. Ex:
2) Vérifier ModelState: si elle est invalide, la vm ne sera pas appliqué de sorte qu'il sera null.
if (!ModelState.IsValid) { ... }
à la première ligne de votre méthode pour vérifier que vous avez le droit de modèle d'abord 🙂 tout d'AbordExact, c'est ce que j'ai décrit sur le second point. En fait, vous pouvez créer une action de filtre qui vérifie Modèle.IsValid et si elle n'est pas valide en retour un message de validation pour le client. De cette façon, vous n'avez pas à le faire chaque action unique.
OriginalL'auteur
Je sais qu'il n'est pas lié à votre cas, toujours, je vous poste ma réponse ici. C'est une bête erreur que j'avais fait dans mon code. Je viens de copier, l'une de mes requêtes Get et changé à la demande Post, et j'ai oublié de décorer le paramètre avec
[FromBody]
. Si quelqu'un d'autre est d'avoir le même problème, assurez-vous que vous décorez le paramètre avec[FromBody]
.OriginalL'auteur
si vous voulez envoyer deux o plus de modèles que vous devriez utiliser cet exemple, cela fonctionne pour moi, bonne chance
OriginalL'auteur