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

发布于 2022-09-06 03:13:34 字数 1797 浏览 19 评论 0

问题:

使用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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文