首頁 >後端開發 >Golang >如何在 Go-Gin 中多次讀取請求正文?

如何在 Go-Gin 中多次讀取請求正文?

DDD
DDD原創
2024-12-26 08:26:11622瀏覽

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

如何在 Go-Gin 中多次讀取請求體

驗證請求資料時,通常需要保留原始請求體進一步加工。但是,多次讀取請求體可能會導致問題。

問題:

以下程式碼讀取請求正文以執行驗證,但無法保留它以供後續函數呼叫:

func SignupValidator(c *gin.Context) {
    var bodyBytes []byte
    if c.Request.Body != nil {
        bodyBytes, _ = ioutil.ReadAll(c.Request.Body)
    }
    fmt.Println(string(bodyBytes)) // empty
    c.Next()
}

解決方案:

至多次存取請求正文,請使用以下步驟:

  1. 讀取一次請求正文並將其儲存在變數中。
  2. 建立一個具有相同正文字節的新緩衝區。
  3. 將請求體設定為新建立的緩衝區。
func SignupValidator(c *gin.Context) {
    byteBody, _ := ioutil.ReadAll(c.Request.Body)
    c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(byteBody))

    fmt.Println(string(byteBody)) // contains the request body

    c.Next()
}

現在,後續的函數呼叫可以存取身體資料沒有任何問題。

以上是如何在 Go-Gin 中多次讀取請求正文?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn