Go 如何控制gin 1.4.0+;中缺少URL参数的行为;?
我正在从Go 如何控制gin 1.4.0+;中缺少URL参数的行为;?,go,url-routing,httphandler,go-gin,Go,Url Routing,Httphandler,Go Gin,我正在从1.3.0迁移到1.4.0(或1.5.0),我发现1.3.0适用于以下代码片段 router := gin.New() router.GET("/func/:id/details", func(c *gin.Context) { value := c.Param("id") fmt.Printf("value is %v\n", value) }) 即使在请求/func//details(请注意缺少的URLparam)时,也会始终到达处理程序,而1.4.0及以上版本将返
1.3.0
迁移到1.4.0
(或1.5.0
),我发现1.3.0
适用于以下代码片段
router := gin.New()
router.GET("/func/:id/details", func(c *gin.Context) {
value := c.Param("id")
fmt.Printf("value is %v\n", value)
})
即使在请求/func//details
(请注意缺少的URLparam
)时,也会始终到达处理程序,而1.4.0
及以上版本将返回404
有可能控制这种行为吗?(与在1.3.0
中的工作方式相同)
我试过使用1.5.0中介绍的
func main() {
type Params struct {
ID string `uri:"id" binding:"required"`
}
router := gin.New()
router.GET("/func/:id/details", func(c *gin.Context) {
var pp Params
if err := c.BindUri(&pp); err != nil {
log.Errorf("failed binding: %v", err)
c.Status(http.StatusBadRequest)
return
}
log.Printf("params %+v\n", pp)
})
if err := router.Run("localhost:8080"); err != nil {
panic(err)
}
}
但是调用时,这也会失败(使用404
)。我发现问题出在包含以下文档的内部cleanPath()
函数上:
。。。以下规则将迭代应用,直到没有其他规则
可以通过以下方式进行处理:
将多个斜杠替换为一个斜杠李>
如果您在Github上签出最新的主分支,则有一个名为的配置,默认情况下为false。默认情况下,RemoveExtraSlash
不会调用cleanPath()
我所看到的是11月28日添加的,最新提交的1.5.0
是11月24日
您可以从以下位置下载源代码:
然后在go.mod文件的末尾进行替换。有新版本时,您只需删除以下行:
replace github.com/gin-gonic/gin => /home/user/projects/gin
最后,这起作用了。我更新到并使用了默认值RemoveExtraSlash
(false
)来保持所需的行为。
replace github.com/gin-gonic/gin => /home/user/projects/gin