在一个中间件中,我想读取请求正文来执行一些检查。然后,将请求传递给下一个中间件,在那里正文将再次被读取。
以下是我的做法:
bodyBytes, _ := ioutil.ReadAll(req.Body)
req.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes))
// use bodyBytes
// pass to next middleware
现在,req.Body.Close将不会执行任何操作。由于先前的req.Body.Close实现处理了一些连接,它是否会出现问题?
Request.Body
: "服务器将关闭请求正文。ServeHTTP处理程序不需要这样做。" - iczaRequest.Body
字段分配了一个新值。这不是唯一需要关闭的原始body reader的引用。 - icza