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到。这一点让我很困惑。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论