处理完GET请求后,我想将用户重定向到由我的应用程序处理的新URL,该URL会显示结果.
在gin documentation中,我发现了两种不同的方法来做到这一点.一个是使用gin的redirect()
功能,另一个是使用它的路由HandleContext()
功能.引用的文档称redirect()
应用于Post请求或GET请求,但随后又称HandleContext()
应用于"Router"重定向.我不确定我完全理解使用其中一种的含义.
上面引用的文档中给出的第一个用例是:
r.GET("/test", func(c *gin.Context) {
c.Redirect(http.StatusMovedPermanently, "http://www.google.com/")
})
这里似乎不同的是,重定向是到外部URL,远离我的应用程序本身.第二个用例被描述为"路由重定向",是:
r.GET("/test", func(c *gin.Context) {
c.Request.URL.Path = "/test2"
r.HandleContext(c)
})
r.GET("/test2", func(c *gin.Context) {
c.JSON(200, gin.H{"hello": "world"})
})
因此,如果重定向的URL是我的应用程序处理的路径,这似乎是必需的.
但这是一个像任何其他URL一样的URL.那么为什么不直接使用c.redirect()
进行路由重定向呢?
直觉上,这是显而易见的事情.但我怀疑它会产生意想不到的行为(或者至少是我个人没有想到的行为)
使用c.redirect()
进行路由重定向有什么问题?它和router.HandleContext()
有什么区别?