2016-12-04 77 views
0

我正在制作使用API​​密钥来验证和使用Drive API服务的应用程序。我没有使用其他方法进行身份验证。 这是我的代码。使用API​​密钥创建Drive Api服务C#

 var bcs = new BaseClientService.Initializer(); 
     bcs.ApiKey = "38a0f7d505fe18fec64fbf343ecaaaf310dbd744"; 
     bcs.ApplicationName = "sampleApp"; 
     var service = new DriveService(bcs); 
     // Define parameters of request. 
     FilesResource.ListRequest listRequest = service.Files.List(); 
     listRequest.PageSize = 10; 
     listRequest.Fields = "nextPageToken, files(id, name)"; 

     // List files. 
     IList<Google.Apis.Drive.v3.Data.File> files = listRequest.Execute() 
      .Files; 
     Console.WriteLine("Files:"); 
     if (files != null && files.Count > 0) 
     { 
      foreach (var file in files) 
      { 
       Console.WriteLine("{0} ({1})", file.Name, file.Id); 
      } 
     } 
     else 
     { 
      Console.WriteLine("No files found."); 
     } 
     Console.Read(); 

它不起作用。我如何使用API​​密钥进行身份验证?

回答

0

你的应用程序必须使用OAuth 2.0授权请求。没有其他授权协议被支持。如果您的应用程序使用Google登录,则会为您处理授权的某些方面。

到驱动器API的所有请求都必须通过身份验证的用户进行授权。

OAuth 2.0的授权过程或“流程”的详细信息根据您正在编写的应用程序类型而有所不同。以下一般流程适用于所有应用类型:

  • 当你创建你的应用程序,您使用Google API Console注册。 Google随后会提供您稍后需要的信息,例如客户端ID和客户端密码。
  • 在Google API控制台中激活Drive API。 (如果API未在API控制台中列出,则跳过此步骤。)
  • 当您的应用程序需要访问用户数据时,它会要求Google对特定的范围进行访问。
  • 谷歌显示同意画面给用户,要求他们授权您的应用程序请求他们的一些数据。
  • 如果用户批准,那么谷歌给你的应用程序中的短暂访问令牌
  • 您的应用程序请求用户数据,将访问令牌附加到请求。
  • 如果Google确定您的请求和令牌有效,它会返回请求的数据。

有些流程包括附加的步骤,如使用刷新令牌获取新的访问令牌。有关各种类型应用程序流程的详细信息,请参阅Google的OAuth 2.0 documentation

下面是驱动器API的OAuth 2.0范围信息:https://developers.google.com/drive/v3/web/about-auth#what_scope_or_scopes_does_my_app_need

0

也许我是有点晚来回答这个问题,但是这能够帮助未来的人们。如果该文件夹(我猜你正试图获取文件夹中的文件)被设置为公共,那么你不需要进行身份验证。您可以使用公共API密钥访问它。 的解决方案是几乎没有,它只需要的属性设置.Q的文件夹ID:

Google.Apis.Services.BaseClientService.Initializer bcs = new Google.Apis.Services.BaseClientService.Initializer(); 
    bcs.ApiKey = "38a0f7d505fe18fec64fbf343ecaaaf310dbd744"; 
    bcs.ApplicationName = "sampleApp"; 

    Google.Apis.Drive.v3.DriveService service = new Google.Apis.Drive.v3.DriveService(bcs); 

    // Define parameters of request. 
    Google.Apis.Drive.v3.FilesResource.ListRequest listRequest = service.Files.List(); 

    string folderID = "1234567"; //Change this for your folder ID. 
    listRequest.Q = "'" + folderID + "' in parents"; 
    listRequest.PageSize = 10; 
    listRequest.Fields = "nextPageToken, files(id, name)"; 

    // List files. 
    IList<Google.Apis.Drive.v3.Data.File> files = listRequest.Execute().Files; 
    Console.WriteLine("Files:"); 
    if (files != null && files.Count > 0) 
    { 
     foreach (var file in files) 
     { 
      Console.WriteLine("{0} ({1})", file.Name, file.Id); 
     } 
    } 
    else 
    { 
     Console.WriteLine("No files found."); 
    } 
    Console.Read(); 

通过这种方式找到直接位于编号为文件夹中的所有文件1234567 “Q”属性可以是用于更多的事情,例如使用文件夹特定的MIME类型来搜索文件夹。在这种情况下,它会是这样的:

listRequest.Q = "mimeType = 'application/vnd.google-apps.folder'"; 

要了解更多关于我们如何使用“Q”属性:https://developers.google.com/drive/v3/web/search-parameters

而且这里还有关于如何创建服务公共和私人,然后漂亮的链接如何从文件夹中获取文件,以及如何解决在其中有超过1000个文件夹中的情况:

我希望这有助于!