我需要在 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
}
Run Code Online (Sandbox Code Playgroud)
但是如果更改 URL 大小写,它仍然会抛出 404,有什么方法可以使用 gorilla-mux 实现它
遗憾的是,截至记者发稿,中间件功能被调用后,在URL匹配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)
})
}
Run Code Online (Sandbox Code Playgroud)
然后,只需包装您的多路复用器。
r := mux.NewRouter()
//...
handler := CaselessMatcher(r)
Run Code Online (Sandbox Code Playgroud)
实际上,IMO 还不错。
| 归档时间: |
|
| 查看次数: |
910 次 |
| 最近记录: |