为了账号安全,请及时绑定邮箱和手机立即绑定

Go 可以轻松模拟 Laravel 的 return Redirect::back() 的行为吗?

Go 可以轻松模拟 Laravel 的 return Redirect::back() 的行为吗?

Go
森栏 2022-04-20 17:42:01
在使用Laravel时,我非常感谢能够使用:return Redirect::back();请求后返回上一个 URL POST。在Go中是否有一种简单的内置方法可以做到这一点?http.Redirect(w, r, backURL, http.StatusSeeOther)backURL发出 POST 请求的 URL在哪里。我浏览net/http并搜索了 SE 和谷歌,但我没有找到任何东西。如果以一种简单的方式失败,我将不胜感激任何指向在Go中执行此操作的惯用方式的指针。
查看完整描述

1 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

该Redirect::back()函数使用Referer客户端(浏览器)指定的 HTTP 标头中的 URL。


您可以像 一样访问此标头值r.Header.Get("Referer"),但该http.Request类型还提供了一个Request.Referer()返回此Referer字段值的直接方法,该方法还处理其两种可能的形式("Referer"和"Referrer")。


这是您可以模仿“返回”行为的方式:


func PostHandler(w http.ResponseWriter, r *http.Request) {

    // Process form, then:

    if rf := r.Referer(); rf != "" {

        http.Redirect(w, r, rf, http.StatusSeeOther)

        return

    }


    // No Referer specified, supply your own response

    // or redirect to a default / home page

    http.Redirect(w, r, "/", http.StatusSeeOther)

}

如果您想从许多处理程序中调用它,您可以在辅助函数中捕获此功能:


func redirectBack(w http.ResponseWriter, r *http.Request) {

    if rf := r.Referer(); rf != "" {

        http.Redirect(w, r, rf, http.StatusSeeOther)

        return

    }


    // No Referer specified, supply your own response

    // or redirect to a default / home page

    http.Redirect(w, r, "/", http.StatusSeeOther)

}

然后使用它:


func PostHandler(w http.ResponseWriter, r *http.Request) {

    // Process form, then:

    redirectBack(w, r)

}


查看完整回答
反对 回复 2022-04-20
  • 1 回答
  • 0 关注
  • 135 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信