go - 如何使用 gorilla mux 实现不区分大小写的 URL 匹配
问题描述
我需要在 gorilla mux 中实现不区分大小写的 URL 匹配,因为它是为内置 mux 完成的
我尝试使用这样的中间件来实现相同的目标
router := mux.NewRouter()
router.Use(srv.GetCaseMiddleware())
//GetCaseMiddleware middleware to make match URL case insensitive
func (srv *Server) GetCaseMiddleware() (w mux.MiddlewareFunc) {
var middleware mux.MiddlewareFunc = func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
r.URL.Path = strings.ToLower(r.URL.Path)
next.ServeHTTP(w, r)
})
}
return middleware
}
但是如果 URL 大小写改变它仍然会抛出 404,有没有办法使用 gorilla-mux 来实现它
解决方案
不幸的是,在撰写本文时,中间件函数是在gorilla/mux
.
Mux 支持向路由器添加中间件,如果找到匹配项,这些中间件将按照添加的顺序执行,包括其子路由器。
我建议您使用您提供的链接中的示例。
例如
func CaselessMatcher(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
r.URL.Path = strings.ToLower(r.URL.Path)
next.ServeHTTP(w, r)
})
}
然后,只需包装您的多路复用器。
r := mux.NewRouter()
//...
handler := CaselessMatcher(r)
实际上,IMO 还不错。
推荐阅读
- javascript - 在响应 JSON (HTTP GET) 中添加新字段时是否需要更新主要 API 版本?
- geometry - MySQL 8 ST_GeomFromGeoJSON 抛出经度超出范围错误
- c# - 如何使用 C# CoreBot 为我们的聊天机器人获取/生成图表?
- javascript - 无法单独从列表中划掉项目
- r - R ggplot2 线图在我不想要时添加填充
- python - 将行添加到另一个变量。这些行已在另一个 csv 文件中可用
- python - Excel文件的行总和
- javascript - 赛普拉斯测试中的模拟 imgur 请求/响应
- html - 下拉菜单上的链接不起作用 Bootstrap 4
- mongodb - MongoDB聚合对动态键进行分组