Go-Gin : lecture du corps de la demande plusieurs fois
Dans Go-Gin, la lecture du corps de la demande peut être délicate si vous devez y accéder cela plusieurs fois. Le problème survient lorsque le middleware modifie le corps de la requête, ce qui rend l'accès ultérieur difficile.
Considérez le scénario suivant : vous disposez d'un middleware de validation qui lit le corps pour validation, suivi d'un autre gestionnaire qui nécessite le corps non modifié. Dans ce cas, les modifications du middleware interfèrent avec l'accès ultérieur du gestionnaire au corps d'origine.
Pour résoudre ce problème, vous pouvez utiliser l'approche suivante :
bodyBytes, _ := ioutil.ReadAll(c.Request.Body)
if err := c.ShouldBindJSON(&user); err != nil { // Validation logic }
c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(ByteBody))
Pour implémentez cette solution dans le code fourni, remplacez les lignes suivantes dans le middleware :
// var bodyBytes []byte // if c.Request.Body != nil { // bodyBytes, _ = ioutil.ReadAll(c.Request.Body) // }
par :
bodyBytes, _ := ioutil.ReadAll(c.Request.Body) c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes))
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!