我正在开发一个使用 Grpc 连接到服务器的颤振应用程序。一些服务需要额外的元数据来进行身份验证,所以我想到的第一件事是实现一个拦截器来将元数据添加到这些请求中,如下所示:
class MyClientInterceptor implements ClientInterceptor {
@override
ResponseFuture<R> interceptUnary<Q, R>(ClientMethod<Q, R> method, Q request, CallOptions options, invoker) {
var newOptions = CallOptions.from([options])
..metadata.putIfAbsent('token', () => 'Some-Token');
return invoker(method, request, newOptions);
}
}
但我明白Caught error: Unsupported operation: Cannot modify unmodifiable map
了,因为 CallOptions 使用了不可修改的地图。
第一个问题:向某些请求添加身份验证而不是使用这些元数据创建客户端存根的最佳做法是什么?
第二:如何从选项中复制元数据,对其进行修改并使用修改后的对象?