Ошибка обновления строк API Google Sheets

c# google-api google-sheets

928 просмотра

2 ответа

1 Репутация автора

Я пытаюсь обновить строки в Google Sheets, но у меня ошибка 403

У запроса недостаточно областей проверки подлинности. [403] Ошибки [Сообщение [Запрос имеет недостаточные области проверки подлинности.] Местоположение [-] Причина [запрещен] Домен [глобальный]]

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);
Автор: Louie Anderson Источник Размещён: 18.07.2016 11:05

Ответы (2)


0 плюса

171 Репутация автора

Я не вижу строки, где вы определяете Scopes в своем коде, но убедитесь, что вы не запрашиваете область READONLY

Автор: stuart_gunn Размещён: 25.07.2016 12:54

2 плюса

4742 Репутация автора

Google кэширует проверку, поэтому после подтверждения клиента через всплывающее окно браузера он больше не появится. Однако, когда вы изменяете области, которые он не проверяет, он просто продолжает использовать уже утвержденные (сохраненные) учетные данные, какими бы ни были эти предыдущие разрешения.

Пример кода упоминает об этом в комментарии:

При изменении этих областей удалите ранее сохраненные учетные данные по адресу ~ / .credentials / sheet.googleapis.com-dotnet-quickstart.json

Поскольку вы пишете System.Environment.SpecialFolder.Personal, он будет отображаться в папке / Documents, в .credentials/sheets.googleapis.com-dotnet-quickstart.jsonсоответствии с Path.Combine. Удалите этот файл (или папку, если хотите) и убедитесь, что вы используете static string[] Scopes = { SheetsService.Scope.Spreadsheets };его, он снова предложит вам сейчас, и вы должны быть готовы.

Автор: DrewJordan Размещён: 08.08.2016 02:36
Вопросы из категории :
32x32