beego对带有参数的路由无法正常match

问题:

使用beego框架,浏览器访问/login?exit=true时,跳转到的的是/

代码:

路由注册

func init() {
    beego.Router("/login", &controllers.LoginController{})
    beego.Router("/", &controllers.MainController{})
}

就两个。

登陆时使用/login,退出时使用/login?exit=true。

LoginController的Get方法

func (this *LoginController) Get() {
    isExit := this.Input().Get("exit") == "true"

    if isExit {
        beego.Trace("login/isexit")
        this.Ctx.SetCookie("uname", "", -1, "/")
        this.Ctx.SetCookie("pwd", "", -1, "/")
        this.Redirect("/", 301)
        return
    }

    this.TplName = "login.html"
    this.Data["Title"] = "login"
}

所以登陆和退出都通过/login。只是退出时,带有参数。

在safari上观察到的行为:

在浏览器中输入http:localhost:8080/login?exit=true时,bee run的输出如下

2017/11/03 14:43:43 [D] [default.go:16] home/get
2017/11/03 14:43:43 [D] [server.go:2568] |      127.0.0.1| 200 |   1.341276ms|   match| GET      /     r:/
2017/11/03 14:43:43 [D] [default.go:16] home/get
2017/11/03 14:43:43 [D] [server.go:2568] |      127.0.0.1| 200 |    666.276µs|   match| GET      /     r:/
2017/11/03 14:43:44 [D] [login.go:18] login/isexit
2017/11/03 14:43:44 [D] [server.go:2568] |      127.0.0.1| 301 |     62.869µs|   match| GET      /login   r:/login
2017/11/03 14:43:44 [D] [default.go:16] home/get
2017/11/03 14:43:44 [D] [server.go:2568] |      127.0.0.1| 200 |   1.067127ms|   match| GET      /     r:/
2017/11/03 14:43:44 [D] [default.go:16] home/get
2017/11/03 14:43:44 [D] [server.go:2568] |      127.0.0.1| 200 |    726.463µs|   match| GET      /     r:/

可以看到一共相应了五次,中间一次是/login。但是一般正常的时候,访问/login都是只有一次match的输出。

这次算是match到了/login。但是不是每次都能match到。这一点让我很困惑。

阅读 2.9k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进