大猩猩混合器无法将两条路线分开

我正在使用大猩猩,我发现大猩猩路由器无法解析两条路由。我在每个URL的末尾使用尾部斜杠。请考虑以下路由表:


    router := mux.NewRouter()

    baseUri, _ := stringFormatter.Format("/api/{0}", apiVersion)

    // function resource

    router.HandleFunc(baseUri + "/function/", webApiContext.GetAllFunctions).Methods("GET")

    router.HandleFunc(baseUri + "/function/find/", webApiContext.FindFunctions).Methods("GET").Queries("query", "{query}")

    router.HandleFunc(baseUri + "/function/{id}/", webApiContext.GetFunctionById).Methods("GET")

    router.HandleFunc(baseUri + "/function/{id}/body/", webApiContext.GetFunctionBodyById).Methods("GET")

    router.HandleFunc(baseUri + "/function/", webApiContext.CreateFunction).Methods("POST")

    router.HandleFunc(baseUri + "/function/{id}/", webApiContext.UpdateFunction).Methods("PUT")

    router.HandleFunc(baseUri + "/function/{id}/", webApiContext.DeleteFunction).Methods("DELETE")

大猩猩无法将这两条路线分开GET /function/{id}/和GET /function/find/?query={query}。如果我在按id获取函数上方放置一个查找方法,则通过id URL查找查找和获取函数的处理程序调用。


这可以通过从这些URL之一中删除尾部斜杠来解决,即用于查找URL声明。但是我必须使用StrictSlash(true)函数,这使得无法将该黑客与URL声明一起使用。


您能否通过正确的URL声明来帮助解决问题。


繁花如伊
浏览 138回答 1
1回答

肥皂起泡泡

我们必须使用正则表达式在弯曲的括号内进行路径变量检查,因此正确的路由表应该看起来像^    router.HandleFunc(baseUri + "/function/", webApiContext.GetAllFunctions).Methods("GET")    router.HandleFunc(baseUri + "/function/find/", webApiContext.FindFunctions).Methods("GET").Queries("query", "{query}")    router.HandleFunc(baseUri + "/function/{id:[0-9]+}/", webApiContext.GetFunctionById).Methods("GET")    router.HandleFunc(baseUri + "/function/{id:[0-9]+}/body/", webApiContext.GetFunctionBodyById).Methods("GET")    router.HandleFunc(baseUri + "/function/", webApiContext.CreateFunction).Methods("POST")    router.HandleFunc(baseUri + "/function/{id:[0-9]+}/", webApiContext.UpdateFunction).Methods("PUT")    router.HandleFunc(baseUri + "/function/{id:[0-9]+}/", webApiContext.DeleteFunction).Methods("DELETE")
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go