Heim >Backend-Entwicklung >Golang >Wie lese ich den Text einer Go-Gin-Anfrage mehrmals?

Wie lese ich den Text einer Go-Gin-Anfrage mehrmals?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-28 17:04:11919Durchsuche

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

Go-Gin: Anforderungstext mehrmals lesen

In Go-Gin kann das Lesen des Anforderungstexts schwierig sein, wenn Sie darauf zugreifen müssen es mehrmals. Das Problem tritt auf, wenn Middleware den Anforderungstext ändert, was den späteren Zugriff erschwert.

Stellen Sie sich das folgende Szenario vor: Sie haben eine Validierungs-Middleware, die den Text zur Validierung liest, gefolgt von einem anderen Handler, der den unveränderten Text benötigt. In diesem Fall beeinträchtigen die Änderungen der Middleware den Zugriff des nachfolgenden Handlers auf den Originaltext.

Um dieses Problem zu beheben, können Sie den folgenden Ansatz verwenden:

  1. Lesen Sie den Anforderungstext ein eine Variable, bevor Sie sie an die Middleware übergeben:
bodyBytes, _ := ioutil.ReadAll(c.Request.Body)
  1. Übergeben Sie die Body-Variable an die Middleware und führen Sie die Validierung durch darauf:
if err := c.ShouldBindJSON(&user); err != nil {
    // Validation logic
}
  1. Stellen Sie nach der Validierung den ursprünglichen Körper mit io.NopCloser wieder her:
c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(ByteBody))
  1. Jetzt die Variable bodyBytes enthält den ursprünglichen unveränderten Textkörper, und Sie können ihn ohne diesen in nachfolgenden Handlern verwenden Probleme.

Um diese Lösung im bereitgestellten Code zu implementieren, ersetzen Sie die folgenden Zeilen in der Middleware:

// var bodyBytes []byte
// if c.Request.Body != nil {
//  bodyBytes, _ = ioutil.ReadAll(c.Request.Body)
// }

durch:

bodyBytes, _ := ioutil.ReadAll(c.Request.Body)
c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes))

Das obige ist der detaillierte Inhalt vonWie lese ich den Text einer Go-Gin-Anfrage mehrmals?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn