登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-04-10 21:09:36 329浏览 收藏

最近发现不少小伙伴都对Golang很感兴趣,所以今天继续给大家介绍Golang相关的知识,本文《如何使用 gorilla mux 实现不区分大小写的 URL 匹配》主要内容涉及到等等知识点,希望能帮到你!当然如果阅读本文时存在不同想法,可以在评论中表达,但是请勿使用过激的措辞~

问题内容

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


解决方案


不幸的是,截至撰写本文时,中间件函数是在 gorilla/mux 中的 url 匹配之后调用的。

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)

在我看来,这实际上还不错。

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《如何使用 gorilla mux 实现不区分大小写的 URL 匹配》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>