Go-Gin:多次读取请求正文
在 Go-Gin 中,如果您需要访问,读取请求正文可能会很棘手多次。当中间件修改请求正文时,就会出现问题,导致后续访问变得困难。
考虑以下场景:您有一个验证中间件读取请求正文进行验证,后面跟着另一个需要未修改正文的处理程序。在这种情况下,中间件的修改会干扰后续处理程序对原始正文的访问。
要解决此问题,可以使用以下方法:
bodyBytes, _ := ioutil.ReadAll(c.Request.Body)
if err := c.ShouldBindJSON(&user); err != nil { // Validation logic }
c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(ByteBody))
要在提供的代码中实现此解决方案,请将中间件中的以下行替换:
// var bodyBytes []byte // if c.Request.Body != nil { // bodyBytes, _ = ioutil.ReadAll(c.Request.Body) // }
替换为:
bodyBytes, _ := ioutil.ReadAll(c.Request.Body) c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes))
以上是如何多次读取 Go-Gin 请求正文?的详细内容。更多信息请关注PHP中文网其他相关文章!