使用 Laravel 时,我真的很感激能够使用:
return Redirect::back();
在POST
请求后返回上一个网址。
是否有一种简单的内置方法可以在 Go ?
中执行此操作http.Redirect(w, r, backURL, http.StatusSeeOther)
其中backURL
是发出POST请求的URL。
我浏览了net/http
并搜索了SE和谷歌,但我还没有做任何改变。如果没有一个简单的方法,我会很高兴在 Go 中指出这种做法的惯用方法。
答案 0 :(得分:5)
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)
}