From 7e489984dde6ae15da894845d7d40b90b72fd07d Mon Sep 17 00:00:00 2001 From: Bo-Yi Wu Date: Wed, 27 Nov 2019 21:36:35 +0800 Subject: [PATCH] chore: Add RemoveExtraSlash flag --- gin.go | 10 +++++++++- routes_test.go | 1 + 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/gin.go b/gin.go index c194d6bf..f0cd09e4 100644 --- a/gin.go +++ b/gin.go @@ -97,6 +97,10 @@ type Engine struct { // method call. MaxMultipartMemory int64 + // RemoveExtraSlash a parameter can be parsed from the URL even with extra slashes. + // See the PR #1817 and issue #1644 + RemoveExtraSlash bool + delims render.Delims secureJsonPrefix string HTMLRender render.HTMLRender @@ -134,6 +138,7 @@ func New() *Engine { ForwardedByClientIP: true, AppEngine: defaultAppEngine, UseRawPath: false, + RemoveExtraSlash: false, UnescapePathValues: true, MaxMultipartMemory: defaultMultipartMemory, trees: make(methodTrees, 0, 9), @@ -385,7 +390,10 @@ func (engine *Engine) handleHTTPRequest(c *Context) { rPath = c.Request.URL.RawPath unescape = engine.UnescapePathValues } - rPath = cleanPath(rPath) + + if engine.RemoveExtraSlash { + rPath = cleanPath(rPath) + } // Find root of the tree for the given HTTP method t := engine.trees diff --git a/routes_test.go b/routes_test.go index 0c2f9a0c..0c822f6a 100644 --- a/routes_test.go +++ b/routes_test.go @@ -263,6 +263,7 @@ func TestRouteParamsByNameWithExtraSlash(t *testing.T) { lastName := "" wild := "" router := New() + router.RemoveExtraSlash = true router.GET("/test/:name/:last_name/*wild", func(c *Context) { name = c.Params.ByName("name") lastName = c.Params.ByName("last_name")