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

如何在golang中为请求和重定向添加值

如何在golang中为请求和重定向添加值

Go
Qyouu 2022-05-23 17:57:41
我有 API 网关和用户服务微服务。当请求到达 API 网关时,我需要在Rediret()它之前添加一些值给用户服务。func main(){    http.HandleFunc("/login", userLogin)}func userLogin(res http.ResponseWriter, req *http.Request) {    uuid := generateUUID()    // How to add UID to request?    http.Redirect(res, req, userservice, http.StatusSeeOther)}为此,我使用了此处描述的方法。form,_ := url.ParseQuery(req.URL.RawQuery)form.Add("uid", "far")req.URL.RawQuery = form.Encode()这只是在用户服务的登录路径处停止。我也尝试使用:req.Form.Set("uid","foo")这让人感到恐慌。http:恐慌服务 127.0.0.1:55076:分配给 nil 地图中的条目我的用户服务:func main(){    http.HandleFunc("/login", UserLogin)}func UserLogin(res http.ResponseWriter, req *http.Request) {     req.ParseForm()     requestID := req.FormValue("uid")     userID := req.FormValue("userid")     if userID =="sachith"{        sendRequest(requestID)        http.Redirect(res, req, "http://localhost:7070/home", http.StatusSeeOther)    }有没有办法为我们收到的路由请求添加值并将其重定向到另一个服务?
查看完整描述

1 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

要将查询参数添加到重定向位置,您只需将它们添加到函数的url参数即可Redirect。


此外,您不应修改*http.Request传入的参数Redirect以指定目标位置,这不是它的用途。1st,修改它只会对相对重定向产生影响,这不是你在这里想要做的。2nd,url是为此目的而指定的,并且可以始终用于执行相对和绝对重定向。这里没有与设计相反的优势。


apigateway/main.go


package main


import (

    "net/http"

)


func main() {

    http.HandleFunc("/login", loginHandler)

    http.ListenAndServe(":8080", nil)

}


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

    uuid := "911cf95b-6b3f-43fd-b695-c80c79145c51" // generate uuid

    http.Redirect(w, r, "http://localhost:8081/login?user_id="+uuid, http.StatusSeeOther)

}

userservice/main.go


package main


import (

    "net/http"

)


func main() {

    http.HandleFunc("/login", loginHandler)

    http.ListenAndServe(":8081", nil)

}


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

    uuid := r.URL.Query().Get("user_id")

    w.Write([]byte(uuid))

}


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

添加回答

举报

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