为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
胡说叔叔 2023-05-15 10:38:47
我需要在大猩猩 mux 中实现不区分大小写的 URL 匹配,因为它是在此处为内置 mux 完成的我试着用这样的中间件来达到同样的效果router := mux.NewRouter()router.Use(srv.GetCaseMiddleware())//GetCaseMiddleware middleware to make match URL case insensitivefunc (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 实现它
查看完整描述

1 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

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


查看完整回答
反对 回复 2023-05-15
  • 1 回答
  • 0 关注
  • 74 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信