gpt4 book ai didi

laravel - Go 可以很容易地模仿 Laravel 的 return Redirect::back() 的行为吗?

转载 作者:IT王子 更新时间:2023-10-29 01:26:42 26 4
gpt4 key购买 nike

在使用 Laravel 时,我真的很感激能够使用:

return Redirect::back();   

POST 请求后返回到之前的 URL。

Go 中是否有一种简单的内置方法来执行此操作?

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

其中 backURL 是发出 POST 请求的 URL。

我查看了 net/http 并搜索了 SE 和 google,但我没有找到任何结果。如果没有一个简单的方法,我将不胜感激任何指向在 Go 中执行此操作的惯用方法的指针。

最佳答案

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

您可以像 r.Header.Get("Referer") 一样访问此 header 值,但是 http.Request类型还提供了一个直接的 Request.Referer()返回此 Referer 字段值的方法,该字段还处理其 2 种可能的形式("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)
}

关于laravel - Go 可以很容易地模仿 Laravel 的 return Redirect::back() 的行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40544972/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com