为什么Echo框架使用Bind绑定时读取不到Header中的Authorization值?
问题原因
- Echo v4 原生的
c.Bind()方法默认仅绑定路径参数、查询参数、表单数据、请求体数据,不会自动绑定请求头字段,请求头属于独立的绑定数据源,需要调用专属绑定方法。 - 代码中使用的
header:"Authorization"标签本身是合法的,但默认Bind()方法不会读取该标签匹配请求头。
解决方案
直接将原代码中的c.Bind(a)替换为Echo提供的Header专属绑定方法c.BindHeader(a)即可,修改后的核心代码如下:
func TokenCheck(next echo.HandlerFunc) echo.HandlerFunc { return func(c echo.Context) error { a := new(_getData) // 替换为BindHeader绑定请求头 if err := c.BindHeader(a); err != nil { // 按需添加错误处理逻辑 return err } fmt.Print(a) return next(c) } }
如果需要让默认c.Bind()同时支持Header绑定,可以自定义Echo的Binder实现,不过对于仅需要绑定请求头的场景,直接调用BindHeader是最简方案。同类绑定失败场景可额外检查结构体目标字段是否为导出字段(首字母大写)。
内容的提问来源于stack exchange,提问作者Choi yun seok
相关产品推荐
相关产品推荐

