2016-07-18 11 views
0

Ich versuche Zeilen in Google Tabellen zu aktualisieren, haben aber Fehler 403Fehler bei der Aktualisierung Zeilen Google Sheets API

Antrag unzureichend Authentifizierungstive hatte. [403] Fehler [Meldung [hatte anfordern unzureichende Authentifizierung Tive] [Location -.] Grund [verboten] Domain [global]]

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

     // Create Google Sheets API service. 
     var service = new SheetsService(new BaseClientService.Initializer() 
     { 
      HttpClientInitializer = credential, 
      ApplicationName = ApplicationName, 
     }); 

     List<object> list1 = new List<object>() { "Item", "Cost", "Stocked", "Ship Date" }; 
     List<object> list2 = new List<object>() { "Wheel", "$20.50", "4", "3/1/2016" }; 
     List<object> list3 = new List<object>() { "Door", "$15", "2", "3/15/2016" }; 
     List<object> list4 = new List<object>() { "Engine", "$100", "1", "30/20/2016" }; 
     List<object> list5 = new List<object>() { "Totals", "=SUM(B2:B4)", "=SUM(C2:C4)", "=MAX(D2:D4)" }; 
     IList<IList<Object>> list = new List<IList<Object>>() { list1, list2, list3, list4, list5 }; 

     ValueRange VRange = new ValueRange(); 
     VRange.Range = range; 
     VRange.Values = list; 


     SpreadsheetsResource.ValuesResource.UpdateRequest upd = service.Spreadsheets.Values.Update(VRange, spreadsheetId, range); 
     UpdateValuesResponse response = upd.Execute(); 
     Console.WriteLine(response.UpdatedRows); 

Antwort

0

ich die Linie nicht sehen können, wo Sie Scopes definieren in Ihr Code, aber vergewissern Sie sich, dass Sie nicht den READONLY-Gültigkeitsbereich anfordern

+0

Ich korrigierte Bereiche auf 'static string [] Scopes = {SheetsService.Scope.Spreadsheets};' aber es funktioniert nicht wieder –

+0

Können Sie Lesefunktionen ausführen? Ist Drive Api in der Entwicklerkonsole aktiviert? Könnte auch versuchen, das OAUTH-Token neu zu erstellen. –

2

Google speichert die Validierung so, dass Sie nach der Genehmigung des Clients über den Browser nicht mehr angezeigt werden. Wenn Sie jedoch die Bereiche ändern, die nicht geprüft werden, werden weiterhin die bereits genehmigten (gespeicherten) Berechtigungsnachweise verwendet, unabhängig von den vorherigen Berechtigungen.

Das Codebeispiel tut dies erwähnt in einem Kommentar:

Wenn diese Bereiche zu modifizieren, löschen Sie Ihre zuvor gespeicherten Anmeldeinformationen unter ~/.credentials/sheets.googleapis.com-Dotnet-quickstart.json

Da Sie unter System.Environment.SpecialFolder.Personal schreiben, wird es in Ihrem/Dokumente-Ordner angezeigt, unter .credentials/sheets.googleapis.com-dotnet-quickstart.json per Path.Combine. Löschen Sie diese Datei (oder den Ordner, wenn Sie möchten) und stellen Sie sicher, dass Sie static string[] Scopes = { SheetsService.Scope.Spreadsheets }; verwenden, es wird Sie jetzt erneut auffordern und Sie sollten alle eingestellt sein.

+0

Ja, das ist die Lösung, die für mich funktionierte, löschen Sie den Ordner Anmeldeinformationen in 'Eigene Dateien' im Ordner' .Credentials'. – prospector

Verwandte Themen