diff --git a/router.go b/router.go index e7cc79e0..8e145bd3 100644 --- a/router.go +++ b/router.go @@ -428,14 +428,13 @@ func (p *ControllerRegistor) geturl(t *Tree, url, controllName, methodName strin if c.routerType == routerTypeBeego && c.controllerType.Name() == controllName { find := false if _, ok := HTTPMETHOD[strings.ToUpper(methodName)]; ok { - if m, ok := c.methods[strings.ToUpper(methodName)]; ok && m != strings.ToUpper(methodName) { - return false, "" - } else if m, ok = c.methods["*"]; ok && m != methodName { - return false, "" - } else { + if m, ok := c.methods[strings.ToUpper(methodName)]; ok && m == strings.ToUpper(methodName) { + find = true + } else if m, ok = c.methods["*"]; ok && m == methodName { find = true } - } else { + } + if !find { for _, md := range c.methods { if md == methodName { find = true @@ -507,6 +506,8 @@ func (p *ControllerRegistor) geturl(t *Tree, url, controllName, methodName strin return true, url } } + } else { + return false, "" } } } diff --git a/router_test.go b/router_test.go index 2f770485..a7c2f6b2 100644 --- a/router_test.go +++ b/router_test.go @@ -27,6 +27,10 @@ func (this *TestController) Post() { this.Ctx.Output.Body([]byte(this.Ctx.Input.Query(":name"))) } +func (this *TestController) Param() { + this.Ctx.Output.Body([]byte(this.Ctx.Input.Query(":name"))) +} + func (this *TestController) List() { this.Ctx.Output.Body([]byte("i am list")) } @@ -74,14 +78,14 @@ func (this *JsonController) Get() { func TestUrlFor(t *testing.T) { handler := NewControllerRegister() handler.Add("/api/list", &TestController{}, "*:List") - handler.Add("/person/:last/:first", &TestController{}) + handler.Add("/person/:last/:first", &TestController{}, "*:Param") handler.AddAuto(&TestController{}) if handler.UrlFor("TestController.List") != "/api/list" { Info(handler.UrlFor("TestController.List")) t.Errorf("TestController.List must equal to /api/list") } - if handler.UrlFor("TestController.Get", ":last", "xie", ":first", "asta") != "/person/xie/asta" { - t.Errorf("TestController.Get must equal to /person/xie/asta") + if handler.UrlFor("TestController.Param", ":last", "xie", ":first", "asta") != "/person/xie/asta" { + t.Errorf("TestController.Param must equal to /person/xie/asta, but get " + handler.UrlFor("TestController.Param", ":last", "xie", ":first", "asta")) } if handler.UrlFor("TestController.Myext") != "/test/myext" { t.Errorf("TestController.Myext must equal to /test/myext")