首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >httprouter转发到另一个带有参数和url更新的处理程序

httprouter转发到另一个带有参数和url更新的处理程序
EN

Stack Overflow用户
提问于 2021-01-04 05:56:17
回答 1查看 113关注 0票数 0

我在考虑下面的场景:

假设我想要有处理程序X,我在其中做了一些计算,但现在想在返回请求之前转发给另一个处理程序Y。

它应该是这样的

代码语言:javascript
复制
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,但它不转发可能有用的参数。有没有一个简单的解决方案?

EN

回答 1

Stack Overflow用户

发布于 2021-01-04 17:17:49

如果尚未调用WriteHeader,则Write会在写入数据之前调用WriteHeader(http.StatusOK)。(来自http.Server documentation)

如果您认为要重定向,请确保不向ResponseWriter写入任何字节。您可以使用缓冲区或其他东西,而不是直接写入w

只要将第一个函数的参数传入第二个函数...您可以使用cookies,或者更简单。重定向路径可以包括参数。作为路径或GET变量。下面是一个使用已在使用httprouter包的路径示例。

在X()中,

代码语言:javascript
复制
    if weAreRedirecting {
        http.Redirect(w, r, "/y/"+params.ByName("key"), http.StatusFound)
        return
    }

在你的路由器中,router.GET("/y/:key", Y)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65555324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档