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
Freigeben: 2024-12-28 17:04:11
Original
943 Leute haben es durchsucht

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)
Nach dem Login kopieren
  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
}
Nach dem Login kopieren
  1. Stellen Sie nach der Validierung den ursprünglichen Körper mit io.NopCloser wieder her:
c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(ByteBody))
Nach dem Login kopieren
  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)
// }
Nach dem Login kopieren

durch:

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

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage