C# Google API.NET可以';无法访问共享文件夹文件

C# Google API.NET可以';无法访问共享文件夹文件,c#,.net,google-sheets,google-api,google-drive-api,C#,.net,Google Sheets,Google Api,Google Drive Api,我一直在尝试做一些自定义代码,在谷歌工作表文件中搜索我拥有的特定字符串。现在我有这个工作,我用一个ApiKey认证,一切正常,但是!!!我必须将文件的隐私更改为“Public with url”才能工作。我认为这不太正确,尽管 然后我进入下一步,遍历文件夹及其子文件夹中的所有文件,并在所有文件中搜索该字符串,这就是我遇到的问题 string ApplicationName = "My App Name"; string[] Scopes = { DriveServ

我一直在尝试做一些自定义代码,在谷歌工作表文件中搜索我拥有的特定字符串。现在我有这个工作,我用一个ApiKey认证,一切正常,但是!!!我必须将文件的隐私更改为“Public with url”才能工作。我认为这不太正确,尽管

然后我进入下一步,遍历文件夹及其子文件夹中的所有文件,并在所有文件中搜索该字符串,这就是我遇到的问题

        string ApplicationName = "My App Name";
        string[] Scopes = { DriveService.Scope.Drive, DriveService.Scope.DriveFile };

        // Create Google Sheets API service.
        var service = new DriveService(new BaseClientService.Initializer
        {
            ApplicationName = ApplicationName,
            ApiKey = AppSettings.GetValue(AppSettings.API_KEY)
        });

        String folderId = "folder_id";

        ChildrenResource.ListRequest request = service.Children.List(folderId);

        do
        {
            try
            {
                ChildList children = request.Execute();

                foreach (ChildReference child in children.Items)
                {
                    Console.WriteLine("File Id: " + child.Id);
                }
                request.PageToken = children.NextPageToken;
            }
            catch (Exception e)
            {
                Console.WriteLine("An error occurred: " + e.Message);
                request.PageToken = null;
            }
        } while (!String.IsNullOrEmpty(request.PageToken));
我得到一个错误:

Google.Apis.Requests.RequestError
Login Required [401]
Errors [
    Message[Login Required] Location[Authorization - header] Reason[required] Domain[global]
]
同一个API键是我在另一段代码中使用的,我在其中检查单个文件是否有字符串。区别在于,我认为问题在于,我想要迭代文件的文件夹是与我共享的(我不是专有的,但我拥有对它的完全访问权限)。我还试图将其隐私权公开,但没有结果

你知道我犯了什么错误吗?我不知道

解决方案:

        string ApplicationName = "My App Name";
        string[] Scopes = { DriveService.Scope.Drive, DriveService.Scope.DriveFile };

        ClientSecrets secrets = new ClientSecrets()
        {
            ClientId = ""MY_CLIENT_ID,
            ClientSecret = "MY_CLIENT_SECRET"
        };

        var token = new TokenResponse
        {
            AccessToken = "MY_ACCESS_TOKEN",
            RefreshToken = "MY_REFRESH_TOKEN"
        };

        var credentials = new UserCredential(new GoogleAuthorizationCodeFlow(
            new GoogleAuthorizationCodeFlow.Initializer
            {
                ClientSecrets = secrets
            }),
            "user",
            token);

        var service = new DriveService(new BaseClientService.Initializer()
        {
            HttpClientInitializer = credentials,
            ApplicationName = ApplicationName
        });

        return service;

所有的代币和钥匙,我从银行拿到的,都很容易看懂。还要感谢另一个人。

如果您还没有这样做,请尝试建议的错误操作。使用长寿命刷新令牌刷新访问令牌。如果失败,请引导用户通过OAuth流,如中所述

遇到的错误通常是由于以下原因造成的:

  • 代币到期
  • 令牌撤销。这将导致访问令牌和刷新令牌停止工作
  • 未为所需作用域授权令牌
  • 未使用OAuth 2.0协议正确授权请求

有关详细信息,请参阅。

如果尚未执行此操作,请尝试建议的错误操作。使用长寿命刷新令牌刷新访问令牌。如果失败,请引导用户通过OAuth流,如中所述

遇到的错误通常是由于以下原因造成的:

  • 代币到期
  • 令牌撤销。这将导致访问令牌和刷新令牌停止工作
  • 未为所需作用域授权令牌
  • 未使用OAuth 2.0协议正确授权请求

有关更多信息,请参阅。

嘿,伙计,非常感谢,我不知道“长寿命刷新令牌”,所以我开始阅读您共享的链接,并在Google上阅读,直到找到答案。嘿,伙计,非常感谢,我不知道“长寿命刷新令牌”,所以我开始阅读您共享的链接,直到我找到答案。