为什么没有读取 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")
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")