在 Go-Gin 中间件中多次检索请求体
在 Go-Gin 这个 Web 框架中,开发者可能会遇到这样的场景:需要多次读取请求正文。当正文数据用于验证目的并随后传递给后续函数时,这是必要的。
解决此问题的一种方法是在执行验证之前将正文读入变量,然后将正文恢复到其原始值。继续执行下一个函数之前的原始状态:
func SignupValidator(c *gin.Context) { var bodyBytes []byte var bodyBytesCopy []byte if c.Request.Body != nil { bodyBytes, _ = ioutil.ReadAll(c.Request.Body) } copy(bodyBytesCopy, bodyBytes) // Save body for later use var user entity.User if err := c.ShouldBindJSON(&user); err != nil { // Validation code c.Abort() return } c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytesCopy)) // Restore original body c.Next() }
此方法使用 ioutil.ReadAll 函数读取原始流上的正文,然后创建其副本以用于验证。然后恢复原始主体以允许后续函数访问它。
以上是Go-Gin中间件如何多次读取请求体?的详细内容。更多信息请关注PHP中文网其他相关文章!