我想构建一个提供以下路线的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程序提供这些路由的最简单方法是什么?
答案 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...
答案 2 :(得分:1)
您可以尝试这样。
route.GET("/special/*action", func(ctxt *gin.Context) {
ctxt.JSON(200, gin.H{"message": "WildcardUrl"})
})