Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用.Net访问带有服务帐户的Google Sheets会生成一个;调用者没有权限[403]”;错误_.net_Api_Service_Google Sheets_Account - Fatal编程技术网

使用.Net访问带有服务帐户的Google Sheets会生成一个;调用者没有权限[403]”;错误

使用.Net访问带有服务帐户的Google Sheets会生成一个;调用者没有权限[403]”;错误,.net,api,service,google-sheets,account,.net,Api,Service,Google Sheets,Account,我正在使用.Net(并且我已经安装了NuGet软件包)使用服务帐户访问Google Sheets。我有一个谷歌API帐户,创建了服务帐户,甚至还有一个测试表。我已经包含了JSON文件,该文件描述了我从创建的服务帐户下载的凭据。除了使用Execute方法调用时出现以下错误外,所有操作似乎都正常: 调用方没有权限[403]消息[调用方没有权限] 拥有权限]位置[-]原因[禁止]域[全局] 在Google.api.Requests.ClientServiceRequest`1.d\u 34.MoveN

我正在使用.Net(并且我已经安装了NuGet软件包)使用服务帐户访问Google Sheets。我有一个谷歌API帐户,创建了服务帐户,甚至还有一个测试表。我已经包含了JSON文件,该文件描述了我从创建的服务帐户下载的凭据。除了使用Execute方法调用时出现以下错误外,所有操作似乎都正常:

调用方没有权限[403]消息[调用方没有权限] 拥有权限]位置[-]原因[禁止]域[全局]

Google.api.Requests.ClientServiceRequest`1.d\u 34.MoveNext()

我也为服务帐户打开了全局访问,但它仍然不起作用。我试图将服务帐户与工作表共享,但似乎没有任何方法可以做到这一点

我的代码如下所示:

string[] Scopes = { SheetsService.Scope.SpreadsheetsReadonly };
string ApplicationName = "My Unit Test";

GoogleCredential sac;

        using (var stream = new FileStream("credentials.json", FileMode.Open, FileAccess.Read))
        {
            sac = GoogleCredential.FromStream(stream).CreateScoped(Scopes);
        }


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

String spreadsheetId = "1_aeTu4YxDKrqDBvCNR1awyo_7WDha0JBVo1jLxsz3pA";
        String range = "Export!A2:E";
        SpreadsheetsResource.ValuesResource.GetRequest request = service.Spreadsheets.Values.Get(spreadsheetId, range);

ValueRange response = request.Execute(); // Exception thrown here

我需要执行成功登录和访问谷歌工作表我设置。有人看到了吗?或者知道解决方法吗?

没有人回应,我自己找到了解决方法。我用于测试的gmail帐户是一个专门的工作域。它不允许我正确地共享该表。因此,我建立了一个新的谷歌帐户,在中添加了所有的API和服务帐户。已将适当的角色添加到服务帐户。生成了新的json私钥。使用新帐户创建了一个工作表,并与新的服务帐户共享它…它可以工作。重要的是,您必须与服务帐户共享该工作表,否则它将不起作用