为了账号安全,请及时绑定邮箱和手机立即绑定

如何控制 gin 1.4.0+ 中缺少 URL 参数的行为?

如何控制 gin 1.4.0+ 中缺少 URL 参数的行为?

Go
哈士奇WWW 2023-08-14 17:15:02
我正在努力从 迁移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()函数上,文档如下:

...迭代应用以下规则,直到无法进行进一步处理:

  1. 将多个斜杠替换为单个斜杠。

如果你在 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


查看完整回答
反对 回复 2023-08-14
  • 1 回答
  • 0 关注
  • 48 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信