繁体   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