[英]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.