我正在从1.3.0to 1.4.0(or 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贡献1858条经验 获得超8个赞
我发现问题是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 关注
- 196 浏览
添加回答
举报
0/150
提交
取消
