【发布时间】:2020-12-09 15:43:45
【问题描述】:
如何为服务的所有调用添加元数据?我知道如何为特定呼叫发送元数据,但我似乎找不到如何为所有呼叫添加标准元数据。
我尝试使用客户端拦截器在此处添加元数据,但我似乎无法在此处操作上下文的标头。
我在 .net 框架中使用 gRPC,而不是 .net 核心。
【问题讨论】:
如何为服务的所有调用添加元数据?我知道如何为特定呼叫发送元数据,但我似乎找不到如何为所有呼叫添加标准元数据。
我尝试使用客户端拦截器在此处添加元数据,但我似乎无法在此处操作上下文的标头。
我在 .net 框架中使用 gRPC,而不是 .net 核心。
【问题讨论】:
如果这是一个 client 调用(而不是服务器调用),您应该能够通过覆盖客户端调用在拦截器中执行此操作 - 例如:
public override AsyncClientStreamingCall<TRequest, TResponse> AsyncClientStreamingCall<TRequest, TResponse>(ClientInterceptorContext<TRequest, TResponse> context, AsyncClientStreamingCallContinuation<TRequest, TResponse> continuation)
{
Metadata newMetadata = // your logic here
context = new ClientInterceptorContext<TRequest, TResponse>(context.Method,
context.Host, context.Options.WithHeaders(newMetadata));
return base.AsyncClientStreamingCall(context, continuation);
}
(您需要覆盖所有 5 个客户端调用方法;AsyncClientStreamingCall、AsyncDuplexStreamingCall、AsyncServerStreamingCall、AsyncUnaryCall 和 BlockingUnaryCall)
【讨论】: