From c17ae54e64177e6e340f475a40a2eb1a7a876e89 Mon Sep 17 00:00:00 2001 From: 3ocene <7623873+ben-turner@users.noreply.github.com> Date: Sat, 29 Oct 2022 16:11:47 -0700 Subject: [PATCH] add method for handling contexts without resetting HandleContext resets contexts completely, overwriting any modifications since GetContext was called. This is undermines the purpose of being able to GetContexts separately, so this commit adds a new method which only resets the index, but leaves everything else intact. --- gin.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/gin.go b/gin.go index 46cff494..ee245635 100644 --- a/gin.go +++ b/gin.go @@ -588,6 +588,16 @@ func (engine *Engine) ReleaseContext(c *Context) { engine.pool.Put(c) } +// HandleContextAsIs handles the context as is without resetting it. This means +// that all key/values, middleware, etc. will be retained. This is useful for +// handling a context that has been created with *Engine.GetContext. +func (engine *Engine) HandleContextAsIs(c *Context) { + oldIndex := c.index + c.index = -1 + engine.handleHTTPRequest(c) + c.index = oldIndex +} + // ServeHTTP conforms to the http.Handler interface. func (engine *Engine) ServeHTTP(w http.ResponseWriter, req *http.Request) { c := engine.GetContext(w, req)