如何在 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() }
解决方案:
至多次访问请求正文,请使用以下步骤:
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中文网其他相关文章!