2016-12-04 75 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個文件夾中的情況:

我希望這有助於!