2017-01-08 3 views
2

Ich versuche, Google-Blätter mit C# in ASP.net CORE zu erstellen und zu bearbeiten.Wie wird die GoogleSheets-API im .Net-Core verwendet?

Zur Zeit kann ich ein Blatt bearbeiten, mit diesem Code:

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

Wie Sie sehen können, bin ich ein Dienstkonto verwenden.

in Googles .NET Kurzanleitung, verwenden sie diesen Code:

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

aber in .NET-Core, wird der GoogleWebAuthorizationBroker nicht vorhanden. Soweit ich das verstanden habe, wird dies verwendet, um sich mit Oauth2 bei einem Google-Konto zu authentifizieren.

Ich habe auch irgendwo hier auf SO gelesen, dass Sie kein Google-Blatt mit dem Blatt API erstellen können. Sie müssen die Google Drive API verwenden. Ich benutzte die Google Drive API (Gewinn, Authentifizierung mit einem Dienstkonto). Ich konnte eine Datei erstellen, weiß aber nicht, wie ich darauf zugreifen kann. Ich weiß, dass ich eine Datei erstellt habe, weil das Beispiel, das sie auf ihrer API geben, eine kleine Methode hat, die alle Dateien in diesem Dienstkonto anzeigt.

Lange Geschichte kurz: Angenommen, ich habe ein Google-Konto für die Anwendung. Ich möchte dieses Konto verwenden, um mehrere Blätter mit C# .NetCore zu erstellen. Ich möchte, dass diese Blätter wenn möglich nur von bestimmten Personen bearbeitet werden können. Wenn nicht, nur von der Anwendung. Alle anderen dürfen nur eine Sichtberechtigung haben.

Wie kann ich das tun? Ist das Dienstkonto nützlich für das, was ich vorhabe? Wenn nicht, wie kann ich mich mit dem .Net Core authentifizieren?

Bevor Sie fragen, ja, ich suchte (viel) nach einem Ersatz für diesen GoogleWebAuthorizationBroker, aber ich kann es nicht herausfinden. Ich habe Google API nie benutzt und ich bin auch kein erfahrener Programmierer. Bei Verwendung von .NET-Standardcode funktionieren jedoch alle Beispiele in Google Quickstart-Handbüchern. Warum würden sie nicht in .NET Core arbeiten?

Vielen Dank.

Antwort

1

GoogleWebAuthorizationBroker scheint .Net Core unfreundliche Methoden zu verwenden, aber es gibt andere Möglichkeiten der Authentifizierung.

Zuerst benötigen Sie das Refresh-Token Ihrer Anwendung. Wenn Sie zuvor mit Code autorisiert wurden, befindet es sich in AppData\Roaming\GoogleCredentials\Google.Apis.Auth.OAuth2.Responses.TokenResponse-user (Öffnen Sie mit Ihrem bevorzugten Texteditor). Andernfalls sehen Sie this für das Abrufen Ihres Anwendungsaktualisierungstokens.

Dann können Sie einfach wie es zulassen,

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" 
}); 

nach dem SheetsService bekommen, können Sie fortfahren Tabellen zu machen und zu bearbeiten. Um zum Beispiel eine neue Tabelle zu erstellen, können Sie var sheet = service.Spreadsheets.Create(new Spreadsheet());

tun
Verwandte Themen