【问题标题】:Read metadata in grpc on the server side c#在服务器端 c# 读取 grpc 中的元数据
【发布时间】:2019-07-09 20:29:15
【问题描述】:

我正在从客户端发送元数据中的令牌

      Channel channel = new Channel("127.0.0.1:50051", ChannelCredentials.Insecure);
  ItemQuery item = new ItemQuery() { Id = "abc" };
  var client = new MyService.MyServiceClient(channel);
  Metadata data = new Metadata
  {
    { "token", "Bearer xhrttt" }
  };
  var reply = client.GetItem(item, data);

但无法找到在服务器端获取它的方法,感谢任何帮助

下面是我的服务器端代码的示例(我也尝试了某些其他方式)

public override Task<ItemResponse> GetItem(ItemQuery request , ServerCallContext context)
    {
        try
        {
            var a = context.RequestHeaders["token"]; // not working 
            ItemResponse itmRes = new ItemResponse();
            if (request.Id == "foo")
            {
                itmRes.Items.Add(new Item() { Id = "foo", Name = "foobar" });
            }
            return Task.FromResult(itmRes);
        }
        catch(Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }
        return null;
    }

【问题讨论】:

  • 你怎么打电话给var reply = client.GetItem(item, data);?那应该会给你一个构建错误Argument 2: cannot convert from 'Grpc.Core.Metadata' to 'Grpc.Core.ServerCallContext' (CS1503)
  • 不,它没有给我错误。
  • 你是对的。我是个白痴。我使用的是服务器对象而不是客户端对象。
  • @Nick 没关系,解决方案对你有帮助吗

标签: c# .net-core metadata grpc proto


【解决方案1】:

下面是c#中获取元数据的代码

                Metadata.Entry metadataEntry = context.RequestHeaders.FirstOrDefault(m =>
            String.Equals(m.Key, "token", StringComparison.Ordinal));

            if (metadataEntry.Equals(default(Metadata.Entry)) || metadataEntry.Value == null)
            {
                return null;
            }
            Console.WriteLine("Token value is {0}", metadataEntry.Value);

更多详情请参考https://csharp.hotexamples.com/examples/Grpc.Core/ServerCallContext/-/php-servercallcontext-class-examples.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-26
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多