Читайте метаданные в grpc на стороне сервера c # - PullRequest
0 голосов
/ 15 февраля 2019

Я отправляю токен в метаданных со стороны клиента

      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;
    }

1 Ответ

0 голосов
/ 16 февраля 2019

Ниже приведен код для извлечения метаданных в 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

...