Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Membaca Badan Permintaan Berbilang Kali dalam Go-Gin Middleware?

Bagaimana untuk Membaca Badan Permintaan Berbilang Kali dalam Go-Gin Middleware?

Patricia Arquette
Lepaskan: 2024-12-15 09:12:14
asal
865 orang telah melayarinya

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

Membaca Badan Permintaan Berbilang Kali dalam Go-Gin Middleware

Apabila mengesahkan data badan permintaan dalam middleware Go-Gin, adalah perlu untuk mengakses badan berkali-kali. Walau bagaimanapun, membaca dan memanipulasi badan boleh membawa kepada tingkah laku yang tidak dijangka. Artikel ini menangani isu cara membaca isi permintaan beberapa kali dalam perisian tengah pengesahan, memastikan integriti data sepanjang kitaran permintaan HTTP.

Masalah:

Pemaju ditemui situasi di mana mereka perlu mengesahkan data badan permintaan dan mengekalkan maklumat yang disahkan untuk pemprosesan seterusnya. Walau bagaimanapun, menggunakan c.ShouldBindJSON() untuk membaca badan ke dalam struktur menyebabkan percubaan berikutnya untuk membaca badan untuk mengembalikan respons kosong.

// SignupValidator Middleware
func SignupValidator(c *gin.Context) {
    var user entity.User
    if err := c.ShouldBindJSON(&user); err != nil {
        // Validation logic
    }

    // Subsequent read attempt
    bodyBytes, _ := ioutil.ReadAll(c.Request.Body)
    fmt.Println(string(bodyBytes)) // Empty response
}
Salin selepas log masuk

Penyelesaian:

Untuk mengekalkan kandungan permintaan dan mendayakan berbilang bacaan, adalah disyorkan untuk menggunakan teknik ByteBody. Ini melibatkan membaca badan ke dalam penimbal, yang boleh digunakan tanpa menjejaskan permintaan berikutnya.

// SignupValidator Middleware
func SignupValidator(c *gin.Context) {
    byteBody, _ := ioutil.ReadAll(c.Request.Body)
    c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(byteBody))

    var user entity.User
    if err := c.ShouldBindJSON(&user); err != nil {
        // Validation logic
    }

    c.Next()
}
Salin selepas log masuk

Dengan penyelesaian ini, byteBody mengandungi data badan, yang boleh diakses beberapa kali mengikut keperluan. Panggilan ke ioutil.NopCloser() mencipta pembaca baharu yang tidak menutup penimbal asas, membenarkan bacaan seterusnya tanpa kesan sampingan.

Atas ialah kandungan terperinci Bagaimana untuk Membaca Badan Permintaan Berbilang Kali dalam Go-Gin Middleware?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan