簡體   English   中英

如何使用gorilla mux實現不區分大小寫的URL匹配

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM