杜松子酒通配符路线与现有孩子发生冲突

时间:2018-10-17 00:44:48

标签: web-services go gin

我想构建一个提供以下路线的gin程序:

r.GET("/special", ... // Serves a special resource.
r.Any("/*", ...       // Serves a default resource.

但是,这样的程序在运行时会出现紧急情况:

[GIN-debug] GET    /special                  --> main.main.func1 (2 handlers)
[GIN-debug] GET    /*                        --> main.main.func2 (2 handlers)
panic: wildcard route '*' conflicts with existing children in path '/*'

是否可以创建一个gin程序,该程序为每个路由除了的一个缺省资源,而为单个路由提供一个不同的资源?

Web上的许多页面使我相信无法使用默认的gin路由器,那么从gin程序提供这些路由的最简单方法是什么?

3 个答案:

答案 0 :(得分:2)

在gin.NoRoute()不能被接受的情况下,也许其他人(例如我)会收到此错误消息。我采用以下代码from github来寻找解决此问题的方法:

    router.GET("/v1/images/:path1", GetHandler)           //      /v1/images/detail
    router.GET("/v1/images/:path1/:path2", GetHandler)    //      /v1/images/<id>/history

func GetHandler(c *gin.Context) {
    path1 := c.Param("path1")
    path2 := c.Param("path2")

    if path1 == "detail" && path2 == "" {
        Detail(c)
    } else if path1 != "" && path2 == "history" {
        imageId := path1
        History(c, imageId)
    } else {
        HandleHttpError(c, NewHttpError(404, "Page not found"))
    }
}

答案 1 :(得分:1)

看起来像gin.NoRoute(...) function可以解决问题。

r.GET("/special", func(c *gin.Context) { // Serve the special resource...
r.NoRoute(func(c *gin.Context) {         // Serve the default resource...

另请参阅https://stackoverflow.com/a/32444263/244128

答案 2 :(得分:1)

您可以尝试这样。

route.GET("/special/*action", func(ctxt *gin.Context) {
  ctxt.JSON(200, gin.H{"message": "WildcardUrl"})
})