当路由方法不匹配时在大猩猩多路复用器中发送自定义响应

Send custom response in gorilla mux when route method does not match

当路由方法(HTTP 动词)不匹配时,如何发送自定义响应?

当我在 post 方法中点击以下路线时

r.handleFunc("/destination", handler).Methods('GET')

我想接收(假设它是 JSON 响应)

{
    status: "ERROR",
    message: "Route method not supported."

}

我的想法是,我不想让每个处理程序都使用 route.Method == $METHOD 检查。寻找一种我可以定义一次并应用于每条路线的方法。

查看一些 gorilla/handler 存储库。它包含中间件处理程序(例如,在主处理程序之前执行的处理程序),包括 handler for checking whether a HTTP method is allowed。例如:

MethodHandler{
  "GET": myHandler,
}

任何其他方法都会自动 return 一个 405 Method not allowed 响应。

要为路由方法设置自定义 return,您只需用自己的处理程序覆盖处理程序 "MethodNotAllowedHandler"。

示例:

package main

import (
    "fmt"
    "log"
    "net/http"

    "github.com/gorilla/mux"
)

func main() {

    log.Fatal(http.ListenAndServe(":8080", router()))
}

func router() *mux.Router {

    r := mux.NewRouter()

    r.HandleFunc("/destination", destination).Methods("GET")
    r.MethodNotAllowedHandler = MethodNotAllowedHandler()
    return r
}

func destination(w http.ResponseWriter, r *http.Request) {

    fmt.Fprintf(w, "destination output")
}

func MethodNotAllowedHandler() http.Handler {

    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {

        fmt.Fprintf(w, "Method not allowed")
    })
}