首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >httprouter,使用带有扩展的路由路径

httprouter,使用带有扩展的路由路径
EN

Stack Overflow用户
提问于 2020-11-30 20:29:52
回答 1查看 187关注 0票数 0

我使用赫普鲁特作为一个简单的json服务器,由golang提供动力。

我希望有两个带有命名参数的路由,由两个不同的处理程序提供服务。

例如,我需要/v1/1234/v1/1234.json

代码语言:javascript
复制
    router.GET("/v1/:id", Content)
    router.GET("/v1/:id.json", ContentJson)

但命名参数只匹配单个路径段。

我还能解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-30 21:22:39

正如您所说,命名参数匹配整个路径段。您可以通过检查单个处理程序中的后缀并从那里分支来解决这个问题。

代码语言:javascript
复制
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()
    }
}

另一种在没有多个处理程序的情况下处理不同响应类型的方法是使用接受头。

代码语言:javascript
复制
router.GET("/v1/:id", Content)

func Content(w http.ResponseWriter, r *http.Request) {
    if r.Header.Get("Accept") == "application/json" {
        ContentJson()
    } else {
        ContentDefault()
    }
}

然后在请求中设置标头。这可能是最干净的解决方案,但并不是所有用户都那么简单。

代码语言:javascript
复制
curl -H "Accept: application/json" 'http://my.api/v1/:id`
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65080721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档