Я отправляю данные через GRPC, скажем, IntegrationApi
, вызывая метод Foo
. Мне нужно прочитать значения заголовков из ответа (API, с которым я общаюсь, отправляет заголовки, ограничивающие скорость).
Я использую https://www.nuget.org/packages/Grpc.Core/
var metaData = new Metadata();
metadata.Add(new Metadata.Entry("Authorization", $"Bearer {apiKey}"));
var channel = new Channel("url to endpoint", new SslCredentials());
var client = new IntegrationApi(channel);
var callOptions = new CallOptions()
.WithHeaders(metadata)
.WithDeadline(DateTime.UtcNow.AddSeconds(15))
.WithWaitForReady(false);
var response = client.Foo(req, options);
но response
дает мне только свойства, основанные на файле Foo.proto
.
Как мне это сделать?
Вы используете синхронную версию метода "Foo", а та использует упрощенную версию API (= только разрешает доступ к ответу и выдает RpcExceptions в случае ошибки).
Если вы вызовете асинхронную версию того же метода ("FooAsync"), вы получите обратно объект вызова, который может получить доступ ко всем сведениям о вызове (например, к заголовкам ответа).
правда, после смены на FooAsync я смог получить доступ к нужным заголовкам.