diff --git a/router.go b/router.go index 0dbed951..fa742788 100644 --- a/router.go +++ b/router.go @@ -575,7 +575,7 @@ func (p *ControllerRegistor) ServeHTTP(rw http.ResponseWriter, r *http.Request) if requestPath == route.pattern { runrouter = route.controllerType findrouter = true - runMethod = p.getRunMethod(r.Method, route) + runMethod = p.getRunMethod(r.Method, context.Input.Query("_method"), route) break } // pattern /admin url /admin 200 /admin/ 404 @@ -618,7 +618,7 @@ func (p *ControllerRegistor) ServeHTTP(rw http.ResponseWriter, r *http.Request) runrouter = route.controllerType findrouter = true context.Input.Params = params - runMethod = p.getRunMethod(r.Method, route) + runMethod = p.getRunMethod(r.Method, context.Input.Query("_method"), route) break } } @@ -788,7 +788,7 @@ func (p *ControllerRegistor) getErrorHandler(errorCode string) func(rw http.Resp return handler } -func (p *ControllerRegistor) getRunMethod(method string, router *controllerInfo) string { +func (p *ControllerRegistor) getRunMethod(method, _method string, router *controllerInfo) string { method = strings.ToLower(method) if router.hasMethod { if m, ok := router.methods[method]; ok { @@ -796,9 +796,21 @@ func (p *ControllerRegistor) getRunMethod(method string, router *controllerInfo) } else if m, ok = router.methods["*"]; ok { return m } else { + if method == "POST" || strings.ToLower(_method) == "put" { + return "Put" + } + if method == "POST" || strings.ToLower(_method) == "delete" { + return "Delete" + } return strings.Title(method) } } else { + if method == "POST" || strings.ToLower(_method) == "put" { + return "Put" + } + if method == "POST" || strings.ToLower(_method) == "delete" { + return "Delete" + } return strings.Title(method) } }