Maison > développement back-end > Golang > Comment lire le corps d'une requête Go-Gin plusieurs fois ?

Comment lire le corps d'une requête Go-Gin plusieurs fois ?

Mary-Kate Olsen
Libérer: 2024-12-28 17:04:11
original
893 Les gens l'ont consulté

How to Read a Go-Gin Request Body Multiple Times?

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 :

  1. Lire le corps de la requête dans une variable avant de la passer au middleware :
bodyBytes, _ := ioutil.ReadAll(c.Request.Body)
Copier après la connexion
  1. Passez la variable body au middleware et effectuez la validation dessus :
if err := c.ShouldBindJSON(&user); err != nil {
    // Validation logic
}
Copier après la connexion
  1. Après validation, restaurez le corps d'origine à l'aide de io.NopCloser :
c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(ByteBody))
Copier après la connexion
  1. Maintenant, la variable bodyBytes contient le corps d'origine non modifié et vous pouvez l'utiliser dans les gestionnaires suivants sans aucun problème.

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)
// }
Copier après la connexion

par :

bodyBytes, _ := ioutil.ReadAll(c.Request.Body)
c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes))
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal