Maison >développement back-end >Golang >Comment lire un corps de requête plusieurs fois dans Go-Gin ?

Comment lire un corps de requête plusieurs fois dans Go-Gin ?

DDD
DDDoriginal
2024-12-26 08:26:11623parcourir

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

Comment lire le corps de la demande plusieurs fois dans Go-Gin

Lors de la validation des données de la demande, il est souvent nécessaire de conserver le corps de la demande d'origine pour traitement ultérieur. Cependant, lire le corps plusieurs fois peut entraîner des problèmes.

Problème :

Le code suivant lit le corps de la requête pour effectuer la validation, mais ne parvient pas à le conserver pour les appels de fonction ultérieurs. :

func SignupValidator(c *gin.Context) {
    var bodyBytes []byte
    if c.Request.Body != nil {
        bodyBytes, _ = ioutil.ReadAll(c.Request.Body)
    }
    fmt.Println(string(bodyBytes)) // empty
    c.Next()
}

Solution :

Pour accéder au corps de la requête multiple fois, suivez les étapes suivantes :

  1. Lisez le corps de la requête une fois et stockez-le dans une variable.
  2. Créez un nouveau tampon avec les mêmes octets de corps.
  3. Définissez le corps de la requête sur le tampon nouvellement créé.
func SignupValidator(c *gin.Context) {
    byteBody, _ := ioutil.ReadAll(c.Request.Body)
    c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(byteBody))

    fmt.Println(string(byteBody)) // contains the request body

    c.Next()
}

Désormais, les appels de fonction suivants peuvent accéder aux données du corps sans aucun problème. problèmes.

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!

Déclaration:
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