web-dev-qa-db-fra.com

Post FromBody Toujours Null

J'ai créé une nouvelle API avec ASP.NET Core et je ne parviens pas à transmettre de données à un poste client. 

Voici à quoi ressemble le point final:

[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 à quoi ressemble ma charge utile que j'envoie par Postman:

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

Je m'assure que le facteur est défini comme POST, avec Content-Type application/json. Qu'est-ce que je fais mal? 

18
Alex Kibler

Vous obtenez toujours null car vous devez encapsuler toutes vos variables de publication dans un seul objet. Comme ça: 

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

et alors 

public async Task<IActionResult> GetStudentResults([FromBody] MyPostModel postModel)
34
Tinwor

Si le modèle est nul, vérifiez:

1) Où les données sont envoyées: corps, forme? et sur cette base, ajoutez le décorateur à l'action. Pour ex:

[HttpPost]
public JsonResult SaveX([FromBody]MyVM vm) { ... }

2) Check ModelState : s'il n'est pas valide, la machine virtuelle ne sera pas liée et sera donc nulle.

if (ModelState.IsValid) { ... }
3

Je sais que cela n’est pas lié à votre cas, mais je publie ma réponse ici. C'est une erreur stupide que j'ai faite dans mon code. Je viens de copier une de mes requêtes Get et de la changer en requête Post. J'ai oublié de décorer le paramètre avec [FromBody]. Si quelqu'un d'autre a le même problème, assurez-vous de décorer le paramètre avec [FromBody].

[HttpPost]
public IApiResponse Update([FromBody] User user) {
 if (user == null) return new ApiBadRequestResponse(ModelState);
 return _userService.Post(user) ? new ApiOkResponse(user) : new ApiResponse(500);
}
1
Sibeesh Venu

si vous voulez envoyer deux ou plusieurs modèles, vous devriez utiliser cet exemple, cela fonctionne pour moi, bonne chance

    [HttpPost]
    public async Task<ActionResult> addUsuario([FromBody] Newtonsoft.Json.Linq.JObject datos)
    {
        Usuarios user = datos["usuario"].ToObject<Usuarios>();
        Empresas empresa = datos["empresa"].ToObject<Empresas>();
       return  Json(await _srv.addUsuario(user, empresa));
    }
0
Jonathan Gonzalez