斜杠附加到请求路径

  • 本文关键字:请求 路径 buffalo
  • 更新时间 :
  • 英文 :


我正在使用https://github.com/elimity-com/scim,这给了我一个http。我使用app.Mount("/api/v1/scim", scimHandler)装载的处理程序。请求路由到scim处理程序,但后面附加了一个/,这会混淆处理程序。例如,如果我请求/api/v1/scim/Users(一个列表请求(,处理程序就会看到/api/v1/scim/Users/(一个没有id的按id获取的请求(。类似地,如果我请求/api/v1/scim/Users/${id},处理程序会看到/api/v1/scim/Users/${id}/,并且无法正确解析到id。

我看到类似的斜杠附加到其他不使用Mount的路径上,但Buffalo似乎可以处理这些路径的路由。我的/elb_health_check路由以/elb_health_check/的形式到达处理程序,但它仍然可以正确路由,健康检查也不在乎,因为它不检查路径。

是否有禁用此行为的选项?这是一个我应该作为问题报告的错误吗?

我对这个解决方法并不满意,但现在我添加了一个去掉尾部斜杠的包装器。

app.Mount("/api/v1/scim", stripTrailingSlash(scimHandler))
...
func stripTrailingSlash(h http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
path := r.URL.Path
path = strings.TrimSuffix(path, "/")
url, err := url.Parse(path)
if err != nil {
// Fall back to serving unmodified URL
h.ServeHTTP(w, r)
return
}
r.URL = url
h.ServeHTTP(w, r)
})
}

相关内容

  • 没有找到相关文章

最新更新