当路由方法不匹配时在大猩猩多路复用器中发送自定义响应
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")
})
}
当路由方法(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")
})
}