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

Bagaimana untuk Membaca Badan Permintaan Go-Gin Berbilang Kali?

Mary-Kate Olsen
Lepaskan: 2024-12-28 17:04:11
asal
893 orang telah melayarinya

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

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:

  1. Baca isi permintaan ke dalam pembolehubah sebelum menghantarnya ke perisian tengah:
bodyBytes, _ := ioutil.ReadAll(c.Request.Body)
Salin selepas log masuk
  1. Luluskan pembolehubah badan kepada perisian tengah dan lakukan pengesahan padanya:
if err := c.ShouldBindJSON(&user); err != nil {
    // Validation logic
}
Salin selepas log masuk
  1. Selepas pengesahan, pulihkan badan asal menggunakan io.NopCloser:
c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(ByteBody))
Salin selepas log masuk
  1. Kini, pembolehubah bodyBytes mengandungi badan asal yang tidak diubah suai, dan anda boleh menggunakannya dalam pengendali berikutnya tanpa sebarang isu.

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)
// }
Salin selepas log masuk

dengan:

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

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!

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