使用router.HandleContextc重定向和更改响应状态代码

问题描述

我正在使用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 (将#修改为@)