Google.Apis.Requests.RequestError

时间:2017-04-20 06:45:27

标签: c# google-sheets google-spreadsheet-api

我使用c#访问Google电子表格。

实际上,他们有3种方法可以从https://console.developers.google.com/访问点差。

我正在使用服务帐户凭据访问Google电子表格。我在https://console.developers.google.com/创建了一个项目,我启用了工作表API,我还创建了新的服务帐户凭据,P-12文件已下载到我的机器。 在下面显示的特定代码点

SpreadsheetsResource.ValuesResource.GetRequest request = service.Spreadsheets.Values.Get(spreadsheetId, range);

        ValueRange response = request.Execute();

当我尝试从Google Spread表中提取数据时,它会通过授权流程,该流程似乎正常运行。然后它失败了:

  

类型' Google.GoogleApiException'未处理的例外情况发生在   Google.Apis.dll其他信息:   Google.Apis.Requests.RequestError调用方没有权限   [403]错误[       消息[呼叫者没有权限]位置[ - ]原因[禁止]域[全局]]

我几个小时一直在努力。我已经仔细检查了凭据的使用情况,并在Google Spread表上获得了授权。我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

我很确定,此问题是由错误的授权范围引起的。在许多情况下,以官方API文档为指导,您可以看到此代码

            const string credPath = "token.json";
            credential = GoogleWebAuthorizationBroker
                .AuthorizeAsync(
                    GoogleClientSecrets.Load(stream).Secrets,
                    Scopes,
                    "user",
                    CancellationToken.None,
                    new FileDataStore(credPath, true))
                .Result;

在这些示例中,您指定最后一个参数以将某些身份验证数据保存到credPath变量定义的文件夹中。请注意,如果您要在运行应用一次后更改范围,则该身份验证数据不会被覆盖,因此您必须:

  1. 每次运行应用程序之前,都删除此现有数据
  2. 更改credPath
  3. 或仅删除此参数,但是在这种情况下,每次启动应用程序时都必须确认您的身份验证。

答案 1 :(得分:0)

您需要为新创建的凭据帐户分配权限。

只需单击工作表共享按钮,然后添加具有编辑权限的凭据帐户的电子邮件ID。

google sheet api