我正在努力从 迁移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(注意缺少 URL param),1.4.0而上面的内容将返回404。是否可以控制这种行为?(以与它相同的方式工作1.3.0?)我尝试过使用BindUri介绍1.5.0func 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但调用时也会失败(带有)。
1 回答
蓝山帝景
TA贡献1843条经验 获得超7个赞
我发现问题出在内部cleanPath()
函数上,文档如下:
...迭代应用以下规则,直到无法进行进一步处理:
将多个斜杠替换为单个斜杠。
如果你在 Github 上查看最新的 master 分支,就会发现有一个名为“RemoveExtraSlash”的配置,默认情况下为 false。默认情况RemoveExtraSlash
下不会调用cleanPath()
。
我可以看到这是 11 月 28 日添加的,最新提交1.5.0
是 11 月 24 日。
你可以做的是从GitHub下载源代码:
git clone https://github.com/gin-gonic/gin.git /home/user/projects/gin
然后在 go.mod 文件的末尾进行替换。当有新版本时,您只需删除该行:
replace github.com/gin-gonic/gin => /home/user/projects/gin
- 1 回答
- 0 关注
- 65 浏览
添加回答
举报
0/150
提交
取消