【问题标题】:How to connect .NET Core to Google contacts如何将 .NET Core 连接到 Google 联系人
【发布时间】:2020-04-29 18:15:58
【问题描述】:

我想根据数据库编辑谷歌联系人。我已经完成了所有的工作,唯一剩下的就是实现 API,但我就是不知道该怎么做。我在 Google API 仪表板中创建了一个应用程序并创建了一个 OAuth2.0 客户端(我什至不确定这是否是我需要的)。

我已经下载了 Google 程序集并将它们包含在我的 C# 控制台应用程序中。

  • 如何从我的控制台应用程序连接到 Google 联系人?
  • 如何在联系人列表中添加和删除条目?

【问题讨论】:

  • Google 有很好的文档,为什么不使用这些呢? developers.google.com/api-client-library/dotnet/get_started
  • 我试过了,但我无法找到或理解相关信息。但问题可能出在我身上
  • OAuth 客户端需要交互式客户端批准(坐在控制台前面的用户)才能批准您尝试访问的用户的 Google 联系人的访问权限。您的控制台应用程序是试图作为服务运行以管理多个用户(而不是您),还是只是让坐在计算机前的用户在需要时可以实际输入其 Google 凭据的管道?联系人 API 不支持服务帐户(通用“管理员”帐户)。
  • 只有坐在电脑前的用户

标签: c# .net-core google-contacts-api


【解决方案1】:

可以在“已安装的应用程序”部分下的HERE 找到答案。摘录如下:

使用 Books API 的示例代码:

using System;
using System.IO;
using System.Threading;
using System.Threading.Tasks;

using Google.Apis.Auth.OAuth2;
using Google.Apis.Books.v1;
using Google.Apis.Books.v1.Data;
using Google.Apis.Services;
using Google.Apis.Util.Store;

namespace Books.ListMyLibrary
{
    /// <summary>
    /// Sample which demonstrates how to use the Books API.
    /// https://developers.google.com/books/docs/v1/getting_started
    /// <summary>
    internal class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            Console.WriteLine("Books API Sample: List MyLibrary");
            Console.WriteLine("================================");
            try
            {
                new Program().Run().Wait();
            }
            catch (AggregateException ex)
            {
                foreach (var e in ex.InnerExceptions)
                {
                    Console.WriteLine("ERROR: " + e.Message);
                }
            }
            Console.WriteLine("Press any key to continue...");
            Console.ReadKey();
        }

        private async Task Run()
        {
            UserCredential credential;
            using (var stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read))
            {
                credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
                    GoogleClientSecrets.Load(stream).Secrets,
                    new[] { BooksService.Scope.Books },
                    "user", CancellationToken.None, new FileDataStore("Books.ListMyLibrary"));
            }

            // Create the service.
            var service = new BooksService(new BaseClientService.Initializer()
                {
                    HttpClientInitializer = credential,
                    ApplicationName = "Books API Sample",
                });

            var bookshelves = await service.Mylibrary.Bookshelves.List().ExecuteAsync();
            ...
        }
    }
}
  • 在此示例代码中,通过调用 GoogleWebAuthorizationBroker.AuthorizeAsync 方法创建了一个新的 UserCredential 实例。这 静态方法得到以下内容:

    • 客户端密码(或客户端密码的流)。
    • 所需的范围。
    • 用户标识符。
    • 用于取消操作的取消令牌。
    • 可选数据存储。如果未指定数据存储,则默认为具有默认 Google.Apis.Auth 文件夹的 FileDataStore。这 文件夹在 Environment.SpecialFolder.ApplicationData 中创建。
  • 此方法返回的 UserCredential 设置为 BooksService 上的 HttpClientInitializer(使用初始化程序)。作为 如上所述,UserCredential 实现了一个 HTTP 客户端初始化程序。

  • 请注意,在上面的示例代码中,客户端机密信息是从文件中加载的,但您也可以执行以下操作:


credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
    new ClientSecrets
    {
        ClientId = "PUT_CLIENT_ID_HERE",
        ClientSecret = "PUT_CLIENT_SECRETS_HERE"
    },
    new[] { BooksService.Scope.Books },
    "user",
    CancellationToken.None,
    new FileDataStore("Books.ListMyLibrary")
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多