C# Google API.NET可以';无法访问共享文件夹文件
我一直在尝试做一些自定义代码,在谷歌工作表文件中搜索我拥有的特定字符串。现在我有这个工作,我用一个ApiKey认证,一切正常,但是!!!我必须将文件的隐私更改为“Public with url”才能工作。我认为这不太正确,尽管 然后我进入下一步,遍历文件夹及其子文件夹中的所有文件,并在所有文件中搜索该字符串,这就是我遇到的问题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
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上阅读,直到找到答案。嘿,伙计,非常感谢,我不知道“长寿命刷新令牌”,所以我开始阅读您共享的链接,直到我找到答案。