1 回答
TA贡献2019条经验 获得超9个赞
gRPC-Gateway 通过 gRPC 元数据传递来自原始 HTTP 请求的各种信息。但是,我不相信提供了原始路径。仍然可以通过注册元数据注释器来获取传递的路径。
调用时github.com/grpc-ecosystem/grpc-gateway/v2/runtime.NewServeMux(),利用WithMetadata选项 func:
mux := runtime.NewServeMux(runtime.WithMetadata(func(_ context.Context, req *http.Request) metadata.MD {
return metadata.New(map[string]string{
"grpcgateway-http-path": req.URL.Path,
})
}))
然后在您的 gRPC 服务实现中,您可以通过传入的上下文检索值:
func (s *server) AllPath(ctx context.Context, _ *emptypb.Empty) (*emptypb.Empty, error) {
md, _ := metadata.FromIncomingContext(ctx)
log.Printf("path: %s", md["grpcgateway-http-path"][0])
return &emptypb.Empty{}, nil
}
当点击时,例如/foo,这应该记录:
2022/10/25 15:31:42 path: /foo
- 1 回答
- 0 关注
- 182 浏览
添加回答
举报