我在考虑下面的场景:
假设我想要有处理程序X,我在其中做了一些计算,但现在想在返回请求之前转发给另一个处理程序Y。
它应该是这样的
func X(w http.ResponseWriter, r *http.Request, params httprouter.Params){
//calculations
if condition{
var fp httprouter.Params
fp = append(fp, httprouter.Param{Key: "KEY", Value: "VALUE"})
w.WriteHeader(301)
Y(w, r, fp)
return
}
}我遇到的问题是,当页面加载时,它有一个301头,重定向没有注册。它就像一个有301的200页。
我知道有http.Redirect,但它不转发可能有用的参数。有没有一个简单的解决方案?
发布于 2021-01-04 17:17:49
如果尚未调用WriteHeader,则Write会在写入数据之前调用WriteHeader(http.StatusOK)。(来自http.Server documentation)
如果您认为要重定向,请确保不向ResponseWriter写入任何字节。您可以使用缓冲区或其他东西,而不是直接写入w
只要将第一个函数的参数传入第二个函数...您可以使用cookies,或者更简单。重定向路径可以包括参数。作为路径或GET变量。下面是一个使用已在使用httprouter包的路径示例。
在X()中,
if weAreRedirecting {
http.Redirect(w, r, "/y/"+params.ByName("key"), http.StatusFound)
return
}在你的路由器中,router.GET("/y/:key", Y)
https://stackoverflow.com/questions/65555324
复制相似问题