Как реализовать сопоставление URL без учета регистра с помощью Gorilla Mux - PullRequest
0 голосов
/ 03 декабря 2018

Мне нужно внедрить нечувствительное к регистру сопоставление URL-адресов в gorilla 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
}

но все равно выдает 404 при изменении регистра URL, есть ли способ реализовать его с помощью gorilla-mux

1 Ответ

0 голосов
/ 03 декабря 2018

К сожалению, на момент написания этой статьи функции промежуточного программного обеспечения вызывались после сопоставления URL в gorilla/mux.

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)

На самом деле это не плохо для ИМО.

...