1 回答
TA贡献1876条经验 获得超7个赞
就像你说的,命名参数匹配整个路径段。您可以通过检查单个处理程序中的后缀并从那里分支来解决此问题。
router.GET("/v1/:id", Content)
func Content(w http.ResponseWriter, r *http.Request) {
params := httprouter.ParamsFromContext(r.Context())
if strings.HasSuffix(params.ByName("id"), ".json") {
ContentJson()
} else {
ContentDefault()
}
}
在没有多个处理程序的情况下处理不同响应类型的另一种方法是使用Accept标头。
router.GET("/v1/:id", Content)
func Content(w http.ResponseWriter, r *http.Request) {
if r.Header.Get("Accept") == "application/json" {
ContentJson()
} else {
ContentDefault()
}
}
然后,您将在请求中设置标头。这可能是最干净的解决方案,但对所有用户来说并不那么简单。
curl -H "Accept: application/json" 'http://my.api/v1/:id`
- 1 回答
- 0 关注
- 93 浏览
添加回答
举报