猿问

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

我有 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)

    }

有没有办法为我们收到的路由请求添加值并将其重定向到另一个服务?


Qyouu
浏览 279回答 1
1回答

守着星空守着你

要将查询参数添加到重定向位置,您只需将它们添加到函数的url参数即可Redirect。此外,您不应修改*http.Request传入的参数Redirect以指定目标位置,这不是它的用途。1st,修改它只会对相对重定向产生影响,这不是你在这里想要做的。2nd,url是为此目的而指定的,并且可以始终用于执行相对和绝对重定向。这里没有与设计相反的优势。apigateway/main.gopackage mainimport (    "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.gopackage mainimport (    "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))}
随时随地看视频慕课网APP

相关分类

Go
我要回答