为了账号安全,请及时绑定邮箱和手机立即绑定

如何从golang grpc-gateway中的用户请求中提取路径

如何从golang grpc-gateway中的用户请求中提取路径

Go
犯罪嫌疑人X 2023-03-07 13:58:44
我有个问题。是否可以通过用户请求的元数据路径提取。在这里,我有我的原始文件和定义的方法。  rpc AllPath(google.protobuf.Empty) returns (google.protobuf.Empty) {    option (google.api.http) = {      get: "/*",    };  }  rpc Auth(google.protobuf.Empty) returns (TokenRender) {    option (google.api.http) = {      get: "/auth"    };  }}在我的服务器文件中的 AllPath 函数中,我使用了类似这样的东西,可以在 grpc-gateway 生态系统网站上找到。    path := make(map[string]string)    if pattern, ok := runtime.HTTPPathPattern(ctx); ok {        path["pattern"] = pattern // /v1/example/login    }    fmt.Printf("Current path is: %v", path["pattern"])但我当前的模式/路径就像我在原型文件中定义的那样:Current path is: /*如果有人知道如何处理这件事,我将不胜感激:)
查看完整描述

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


查看完整回答
反对 回复 2023-03-07
  • 1 回答
  • 0 关注
  • 182 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信