HTTP 请求体是流,默认只能读一次。中间件如果先读 body 做签名或日志,后面的 binding 可能就读不到数据。

需要重复读取时,要把内容读出来后重新放回 Request.Body。但这只适合小请求体,大文件上传不能这么做。

body, _ := io.ReadAll(c.Request.Body)
c.Request.Body = io.NopCloser(bytes.NewBuffer(body))

更好的做法是控制中间件职责:签名校验只读必要字段,大 body 场景避免全量日志。

分类: Gin 实战 标签: Gin Web API 错误处理

评论

-- 评论已关闭 --

全部评论