.net - Google People API:列出连接时为空
问题描述
使用Google.Apis.PeopleService.v1时, people.connections.list 方法似乎有效(不抛出异常),但返回的对象始终将其所有字段设置为 null。以下是相关代码:
var scopes = new[] { PeopleServiceService.Scope.ContactsReadonly, PeopleServiceService.ScopeConstants.Contacts };
var credential = GoogleCredential.FromFile("./my-secrets.json")
.CreateScoped(scopes);
var service = new PeopleServiceService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
});
var req = service.People.Connections.List("people/me");
req.PageSize = 2000;
req.RequestMaskIncludeField = "person.names";
req.Fields = "connections,totalItems,nextSyncToken";
var res = await req.ExecuteAsync();
Console.WriteLine(res.Connections.Count); // <-- NullReferenceException
my-secrets.json 是从 console.developers.google.com 下载的秘密文件。它看起来像这样:
{
"type": "service_account",
"project_id": "",
"private_key_id": "",
"private_key": "",
"client_email": "",
"client_id": "",
"auth_uri": "",
"token_uri": "",
"auth_provider_x509_cert_url": "",
"client_x509_cert_url": ""
}
有人知道我错过了什么吗?
解决方案
PeopleService API 需要用户凭据,而不是服务凭据。
在本地安装的应用程序(例如控制台应用程序)中,用于GoogleWebAuthorizationBroker.AuthorizeAsync(...)
获取其中之一。
请求必须req.PersonFields
按照此处所述进行设置:https ://developers.google.com/people/api/rest/v1/people.connections/list#query-parameters
例如req.PersonFields = "emailAddresses";
不需要设置req.Fields
或req.RequestMaskIncludeField
。
推荐阅读
- javascript - 通过 ::marker 值查找 li
- python - 修改列表时的 Pyqt5 信号和槽
- python-3.x - 如何在特定日期绘制带有类别计数的 Dash 绘图图
- xml - 如何访问 if 语句 XSLT 中的嵌套元素
- php - 将 getBody() 分配给变量 Guzzle
- mysql - 当同步为真时,TypeORM 抛出 QueryFailedError Table already exists on MySQL
- javascript - 当 UI 中没有相关更改时,有没有办法测试使用 RTL 调用了通过 mapDispatchToProps 传递的函数?
- typescript - Firestore 错误:Update() 需要单个 JavaScript 对象或字段/值对的交替列表
- python - Python函数返回维度数组的索引
- android - 无法在 Skype 中打开 Android 深层链接