为什么没有读取 header 值?

Why is the header value not being read?

package middleware

import (
"fmt"

"github.com/labstack/echo/v4"
)

type _getData struct {
Token string `header:"Authorization"`
}

func TokenCheck(next echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
    a := new(_getData)
    c.Bind(a)
    fmt.Print(a)
    return next(c)
}
}

header里面有授权值,使用bind到echo框架,想知道授权值,但是没有返回值

BindHeaders 未在 Bind 中调用。源代码:

func (b *DefaultBinder) Bind(i interface{}, c Context) (err error) {
    if err := b.BindPathParams(c, i); err != nil {
        return err
    }
    // Issue #1670 - Query params are binded only for GET/DELETE and NOT for usual request with body (POST/PUT/PATCH)
    // Reasoning here is that parameters in query and bind destination struct could have UNEXPECTED matches and results due that.
    // i.e. is `&id=1&lang=en` from URL same as `{"id":100,"lang":"de"}` request body and which one should have priority when binding.
    // This HTTP method check restores pre v4.1.11 behavior and avoids different problems when query is mixed with body
    if c.Request().Method == http.MethodGet || c.Request().Method == http.MethodDelete {
        if err = b.BindQueryParams(c, i); err != nil {
            return err
        }
    }
    return b.BindBody(c, i)
}

您可以通过以下方式获取header中的值:

func TokenCheck(next echo.HandlerFunc) echo.HandlerFunc {
    b := &echo.DefaultBinder{}
    return func(c echo.Context) error {
        a := new(_getData)
        b.BindHeaders(c, a)
        fmt.Print(a)
        return next(c)
    }
}

或者:

token := c.Request().Header.Get("Authorization")