2017-01-08 48 views
2

我想創建和編輯使用c#在ASP.net CORE的谷歌牀單。如何在.Net內核中使用GoogleSheets API?

目前我可以編輯一個表,使用此代碼:

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的核心,該GoogleWebAuthorizationBroker不存在。 據我所知,這是用來驗證谷歌帳戶使用Oauth2。

我也讀過這裏的一些地方,你不能使用表api創建一個谷歌表。你需要使用谷歌驅動器API。 我使用谷歌驅動器API(增益,使用服務帳戶認證)。我能夠創建一個文件,但我不知道如何訪問它。我知道我創建了一個文件,因爲他們在api上給出的示例有一個顯示該服務帳戶中所有文件的小方法。

長話短說: 比方說,我有一個應用程序的谷歌帳戶。我想用這個帳戶來創建多個工作表,使用C#.NetCore。 我希望這些工作表只能由某些人編輯,如果可能的話。如果不是,只能從應用程序中獲取。 其他人都只能查看權限。

我該怎麼做?服務帳戶對我的計劃有用嗎?如果沒有,我如何使用.Net Core對api進行身份驗證?

在你問,是的,我搜索(很多)爲該GoogleWebAuthorizationBroker的替代品,但我無法弄清楚。我從來沒有使用谷歌apis,我也不是一個有經驗的程序員。儘管如此,使用標準的.NET代碼,谷歌快速入門指南上的所有示例都可以工作。爲什麼他們不能在.NET Core中工作?

謝謝。

回答

1

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());

相關問題