Go-Gin: Membaca Badan Permintaan Berkali-kali
Dalam Go-Gin, membaca kandungan permintaan boleh menjadi rumit jika anda perlu mengakses ia berkali-kali. Isu timbul apabila perisian tengah mengubah suai isi permintaan, menjadikan akses seterusnya sukar.
Pertimbangkan senario berikut: anda mempunyai perisian tengah pengesahan yang membaca kandungan untuk pengesahan, diikuti oleh pengendali lain yang memerlukan badan yang tidak diubah suai. Dalam kes ini, pengubahsuaian middleware mengganggu akses pengendali seterusnya kepada badan asal.
Untuk menyelesaikan isu ini, anda boleh menggunakan pendekatan berikut:
bodyBytes, _ := ioutil.ReadAll(c.Request.Body)
if err := c.ShouldBindJSON(&user); err != nil { // Validation logic }
c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(ByteBody))
Untuk melaksanakan penyelesaian ini dalam kod yang disediakan, gantikan baris berikut dalam middleware:
// var bodyBytes []byte // if c.Request.Body != nil { // bodyBytes, _ = ioutil.ReadAll(c.Request.Body) // }
dengan:
bodyBytes, _ := ioutil.ReadAll(c.Request.Body) c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes))
Atas ialah kandungan terperinci Bagaimana untuk Membaca Badan Permintaan Go-Gin Berbilang Kali?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!