【问题标题】:How to implement case insensitive URL matching using gorilla mux如何使用 gorilla mux 实现不区分大小写的 URL 匹配
【发布时间】:2019-05-04 17:44:20
【问题描述】:

我需要在 gorilla mux 中实现不区分大小写的 URL 匹配为it is done here for built in 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 来实现它

【问题讨论】:

    标签: go gorilla


    【解决方案1】:

    不幸的是,在撰写本文时,中间件函数在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 其实还不错。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-05
      • 2016-10-01
      • 2011-10-14
      • 2020-06-06
      • 1970-01-01
      • 2012-05-25
      • 2021-04-29
      • 1970-01-01
      相关资源
      最近更新 更多