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

我正在努力从 迁移1.3.01.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.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但调用时也会失败(带有)。


哈士奇WWW
浏览 66回答 1
1回答

蓝山帝景

我发现问题出在内部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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go