如何在.Net核心中使用GoogleSheets API?

时间:2017-01-08 22:47:01

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

我正在尝试使用ASP.net CORE中的c#创建和编辑Google表格。

目前我可以使用以下代码编辑工作表:

var credential = GoogleCredential.
        FromStream(new FileStream("Google/client_secrets.json", FileMode.Open)).
            CreateScoped(SheetsService.Scope.Spreadsheets);
        var service = new SheetsService(new BaseClientService.Initializer
        {
            HttpClientInitializer = credential,
            ApplicationName = "just a test"
        });
// service.Spreadsheets.Values.Update(valueRangeNames, spreadsheetId, rangeNames);

如您所见,我正在使用服务帐户。

在谷歌的.NET快速入门指南中,他们使用以下代码:

UserCredential credential;

        using (var stream = new FileStream("client_secret.json", FileMode.Open, FileAccess.Read))
        {
            string credPath = System.Environment.GetFolderPath(
                System.Environment.SpecialFolder.Personal);
            credPath = Path.Combine(credPath, ".credentials/sheets.googleapis.com-dotnet-quickstart.json");

            credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                GoogleClientSecrets.Load(stream).Secrets,
                Scopes,
                "user",
                CancellationToken.None,
                new FileDataStore(credPath, true)).Result;
            Console.WriteLine("Credential file saved to: " + credPath);
        }

但是,在.NET Core中,GoogleWebAuthorizationBroker不存在。 根据我的理解,这用于使用Oauth2对Google帐户进行身份验证。

我也在这里读到了SO,你无法使用工作表api创建一个google工作表。你需要使用谷歌驱动器API。 我使用了谷歌驱动器API(获取,使用服务帐户进行身份验证)。我能够创建一个文件,但我不知道如何访问它。我知道我创建了一个文件,因为他们在api上提供的示例有一个显示该服务帐户中所有文件的方法。

长话短说: 假设我有一个谷歌帐户的应用程序。我想使用此帐户创建多个工作表,使用C#.NetCore。 如果可能的话,我希望这些工作表只能由某些人编辑。如果没有,仅来自应用程序。 其他人只有查看权限。

我该怎么做?服务帐户对我的计划有用吗?如果没有,我如何使用.Net Core对api进行身份验证?

在你问之前,是的,我搜索(很多)替换GoogleWebAuthorizationBroker,但我无法弄清楚。我从未使用谷歌apis,我也不是一个经验丰富的程序员。尽管如此,使用标准的.NET代码,谷歌快速入门指南上的所有示例都可以使用。为什么它们不能在.NET Core中运行?

谢谢。

1 个答案:

答案 0 :(得分:2)

GoogleWebAuthorizationBroker似乎使用.Net Core不友好的方法,但还有其他身份验证方法。

首先,您需要应用程序的刷新令牌。如果您之前已获得代码授权,则它将位于AppData\Roaming\GoogleCredentials\Google.Apis.Auth.OAuth2.Responses.TokenResponse-user(使用您喜欢的文本编辑器打开)。否则,请参阅this以获取应用程序刷新令牌。

然后你可以简单地授权,

var token = new TokenResponse { RefreshToken = tokenYouJustGot };
UserCredential credentials;
using (var stream = File.OpenRead("client_secret.json"))
{
    credentials = new UserCredential(new GoogleAuthorizationCodeFlow(
        new GoogleAuthorizationCodeFlow.Initializer()
        {
            ClientSecretsStream = stream
        }), "user", token);
}

var service = new SheetsService(new BaseClientService.Initializer()
{
    HttpClientInitializer = credentials,
    ApplicationName = "Sample Application"
});

获取SheetsService后,您可以继续制作和修改电子表格。 例如,要创建新的电子表格,您可以执行var sheet = service.Spreadsheets.Create(new Spreadsheet());