2017-02-16 4 views
11

J'ai une nouvelle API que je construis avec Asp.Net Core, et je ne peux pas obtenir de données POSTed à un point de terminaison.Post Core Asp.Net de Body Always Null

Voici ce que le point final 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 utile que je vous envoie par Postman ressemble:

{ 
    "userSocs": [ 
      "291123", 
      "291171", 
      "312021", 
      "291071", 
      "152031", 
      "533011" 
     ], 
    "collegeId": 1 
} 

Je fais en sorte que je postier défini comme POST, avec content-type = application/json. Qu'est-ce que je fais de mal>?

Répondre

20

Vous obtenez toujours null parce que vous devez encapsuler toutes vos variables de publication dans un seul objet. Comme ceci:

public class MyPostModel { 
    public List<string> userSocs {get; set;} 
    public int collegeId {get; set;} 
} 

puis

public async Task<IActionResult> GetStudentResults([FromBody] MyPostModel postModel) 
+0

Ce n'était pas un problème dans .NET 4.5, était-il? Je pourrais jurer que je me souviens d'envoyer plusieurs paramètres dans un POST –

+3

@AlexKibler: Seulement si vous envoyez les paramètres via formulaire ou obtenir une requête. Vous ne pouvez avoir qu'un seul modèle dans votre corps, donc tout type non-basic (int, string, etc.) sera sérialisé au premier modèle. Dans ASP.NET Core (indépendant de 4.5 ou .NET Core) vous ne pouvez avoir qu'un seul FromBody (dans WebApi 2.x c'était implicite), car WebAPI et MVC sont maintenant fusionnés en un seul framework, où ils étaient distincts auparavant – Tseng