请耐心等待,这是我在StackOverflow上发布的第一个问题,因此我不确定描述问题的最佳方式是什么。 啊,我也提前为我的英语道歉。 ;)
这是简短的版本:尽管看起来我做了Google建议做的所有事情,但我仍然无法从云端硬盘上传或下载文件。 我正在使用Visual Studio和Google.Apis.Drive.v2,我试图使用服务帐户,因为它是必须上传远程文件夹中文件的Web服务器。 所有示例和示例都使用CLIENT_ID / CLIENT_SECRET机制,这就是为什么我很难理解发生了什么以及我失败的原因和方式。
这就是我所做的:
...然后我写了这个来创建一个Drive Service对象:
public static DriveService GetDriveService(string PrivateKey, string ServiceAccountEmail, string Username, string ApplicationName)
{
X509Certificate2 certificate = new X509Certificate2(PrivateKey, "notasecret", X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet);
ServiceAccountCredential credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(ServiceAccountEmail)
{
Scopes = new[] {
DriveService.Scope.Drive,
DriveService.Scope.DriveAppdata,
DriveService.Scope.DriveAppsReadonly,
DriveService.Scope.DriveFile,
DriveService.Scope.DriveScripts,
DriveService.Scope.DriveReadonly,
DriveService.Scope.DriveMetadataReadonly},
User = Username
}.FromCertificate(certificate));
// Create the service.
return new DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName
});
}
...在asp.net MVC控制器中(只是为了尝试)我把它推了出来:
string PrivateKey = @"PATH/XXXXX.p12";
string ServiceAccountEmail = "thatloooooongstrangenumerseccecc@developer.gserviceaccount.com";
string Username = "XXXXXXX";
string ApplicationName = "XXXXXX";
DriveService service = ImageHelper.GetDriveService(PrivateKey, ServiceAccountEmail, Username, ApplicationName);
if (service != null)
{
FilesResource.ListRequest request = service.Files.List();
request.Q = "mimeType='application/vnd.google-apps.folder' and trashed=false";
FileList files = request.Execute();
}
......但关键是我总是这样:
类型' Google.Apis.Auth.OAuth2.Responses.TokenResponseException'的例外情况发生在Google.Apis.dll中,但未在用户代码中处理
其他信息:错误:" access_denied",说明:"请求的客户未经授权。",Uri:"" **
有什么想法吗?