gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:16:40 27 4
gpt4 key购买 nike

我正在从 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.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()具有以下文档的功能:

... The following rules are applied iteratively until no further processing can be done:

  1. Replace multiple slashes with a single slash.

reference



如果你在 Github 上查看最新的 master 分支,就会有一个名为 RemoveExtraSlash 的配置。并且默认为假。 RemoveExtraSlash默认不会调用 cleanPath() here .

我可以看到这是在 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

关于go - 如何控制 gin 1.4.0+ 中缺少 URL 参数的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59544026/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com