首页 >后端开发 >Golang >如何在 Go-Gin 中多次读取请求正文?

如何在 Go-Gin 中多次读取请求正文?

DDD
DDD原创
2024-12-26 08:26:11619浏览

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