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

我有个问题。是否可以通过用户请求的元数据路径提取。


在这里,我有我的原始文件和定义的方法。


  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: /*


如果有人知道如何处理这件事,我将不胜感激:)


犯罪嫌疑人X
浏览 183回答 1
1回答

慕少森

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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go