问题描述
我正在使用gin路由API请求。
中间件之一负责将传入请求从一条路径重定向到另一条路径。
我正在关注文档并像这样使用HandleContext(c)
...
func(c *gin.Context) {
ctx := c.Request.Context()
logger := log.MustGetFromContext(ctx)
redirectRule := getRedirectRule(c.Request.URL,config.RedirectRoutes)
if redirectRule == nil {
c.Next()
return
}
logger.Tracef("re-routing layer from path:[%s %s],to path:[%s %s]",c.Request.Method,c.Request.URL.Path,redirectRule.Method,redirectRule.DestinationPath)
c.Request.URL.Path = redirectRule.DestinationPath
c.Request.Method = redirectRule.Method
// this is the phoenix way... even if there is an error...
logger.Tracef("compatibility layer,changing http status from [%v] to [200] ",c.Writer.Status())
responseBuffer := response_buffer.NewResponseBuffer(c.Writer)
c.Writer = responseBuffer
router.HandleContext(c)
responseBuffer.SetStatus(http.StatusOK)
c.Abort()
}
本节
responseBuffer := response_buffer.NewResponseBuffer(c.Writer)
c.Writer = responseBuffer
router.HandleContext(c)
responseBuffer.SetStatus(http.StatusOK)
注入一个名为responseBuffer的自定义ResponseWriter
,它允许我缓冲主体和状态,以便可以在将其刷新回客户端之前对其进行操作。
但是在调用router.HandleContext(c)
之后,我在调试过程中看到c.Writer是gin.responseWriter类型,而不是我的bufferWriter。
在这种情况下,我可以通过其他任何方式更改响应状态代码或操纵正文吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)