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

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

Mary-Kate Olsen
发布: 2024-12-28 17:04:11
原创
893 人浏览过

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

Go-Gin:多次读取请求正文

在 Go-Gin 中,如果您需要访问,读取请求正文可能会很棘手多次。当中间件修改请求正文时,就会出现问题,导致后续访问变得困难。

考虑以下场景:您有一个验证中间件读取请求正文进行验证,后面跟着另一个需要未修改正文的处理程序。在这种情况下,中间件的修改会干扰后续处理程序对原始正文的访问。

要解决此问题,可以使用以下方法:

  1. 将请求正文读入将变量传递给中间件之前:
bodyBytes, _ := ioutil.ReadAll(c.Request.Body)
登录后复制
  1. 将 body 变量传递给中间件并对其进行验证:
if err := c.ShouldBindJSON(&user); err != nil {
    // Validation logic
}
登录后复制
  1. 验证后,使用 io.NopCloser 恢复原始主体:
c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(ByteBody))
登录后复制
  1. 现在,bodyBytes 变量包含原始未修改的主体,您可以在后续处理程序中使用它,而无需任何

要在提供的代码中实现此解决方案,请将中间件中的以下行替换:

// 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板