【问题标题】:Create a Drive Api Service with an API Key C#使用 API 密钥 C# 创建 Drive Api 服务
【发布时间】:2023-03-28 01:20:02
【问题描述】:

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

        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 密钥进行身份验证?

【问题讨论】:

    标签: c# google-drive-api drive


    【解决方案1】:

    也许我回答这个问题有点晚了,但这可以帮助未来的人。如果文件夹(我猜您正在尝试获取文件夹中的文件)设置为公开,那么您不需要进行身份验证。您可以使用公共 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();
    

    这样,它会找到直接位于 ID 为 1234567 的文件夹中的所有文件。 'Q' 属性可用于更多事情,例如使用文件夹特定的 MIME 类型搜索文件夹。在这种情况下,它会是这样的:

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

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

    这里有很好的链接,介绍如何创建公共和私人服务,然后如何从文件夹中获取文件,以及如何解决文件夹中有超过 1000 个文件的情况:

    我希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      您的应用程序必须使用OAuth 2.0 来授权请求​​。不支持其他授权协议。如果您的应用程序使用 Google 登录,系统会为您处理某些方面的授权。

      对 Drive API 的所有请求都必须由经过身份验证的用户授权。

      OAuth 2.0 的授权过程或“流程”的详细信息会有所不同,具体取决于您编写的应用程序类型。以下一般流程适用于所有应用程序类型:

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

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

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

      【讨论】:

        猜你喜欢
        • 2019-02-03
        • 2020-01-30
        • 2020-10-06
        • 2012-08-03
        • 1970-01-01
        • 2018-09-01
        • 2021-03-30
        • 2018-07-15
        • 1970-01-01
        相关资源
        最近更新 更多