2 回答
TA贡献1836条经验 获得超5个赞
您可能不喜欢默认映射规则,并且可能希望通过所有 HTTP 标头,例如:
例如
func CustomMatcher(key string) (string, bool) {
switch key {
case "X-Custom-Header1":
return key, true
case "X-Custom-Header2":
return "custom-header2", true
default:
return key, false
}
}
mux := runtime.NewServeMux(
runtime.WithIncomingHeaderMatcher(CustomMatcher),
)
要将默认映射规则与您自己的规则一起保留,请编写:
func CustomMatcher(key string) (string, bool) {
switch key {
case "X-User-Id":
return key, true
default:
return runtime.DefaultHeaderMatcher(key)
}
}
它适用于两者:
$ curl --header "x-user-id: 100d9f38-2777-4ee2-ac3b-b3a108f81a30" ...
和
$ curl --header "X-USER-ID: 100d9f38-2777-4ee2-ac3b-b3a108f81a30" ...
要在 gRPC 服务器端访问此标头,请使用:
userID := ""
if md, ok := metadata.FromIncomingContext(ctx); ok {
if uID, ok := md["x-user-id"]; ok {
userID = strings.Join(uID, ",")
}
}
另外,您应该查看有关 gRPC-Gateway 的教程系列,即https://grpc-ecosystem.github.io/grpc-gateway/docs/tutorials/。
TA贡献2021条经验 获得超8个赞
可以将 HTTP 标头映射到 gRPC 元数据,如此处所述
这应该有效:
// in Client.MiddlewareAuth
r.Header.Set("Grpc-Metadata-My-Data", "...")
// in Server.List
md.Get("grpcgateway-My-Data")
- 2 回答
- 0 关注
- 169 浏览
添加回答
举报