猿问

如何使用 gorilla mux 实现不区分大小写的 URL 匹配

我需要在大猩猩 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 实现它


胡说叔叔
浏览 77回答 1
1回答

绝地无双

不幸的是,在撰写本文时,中间件函数是在gorilla/mux.Mux 支持向 Router 添加中间件,如果找到匹配项,中间件将按照添加的顺序执行,包括其子路由器。我建议使用您提供的链接中的示例。例如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实际上还不错。
随时随地看视频慕课网APP

相关分类

Go
我要回答