[英]How to implement case insensitive URL matching using gorilla mux
我需要在gorilla mux中实现不区分大小写的URL匹配,因为它是为内置多路复用器完成的
我尝试使用像这样的中间件来实现相同的目的
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
进行 URL匹配后调用中间件函数。
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。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.