C# 使用.NET API在google drive中看不到新的电子表格

C# 使用.NET API在google drive中看不到新的电子表格,c#,google-api,google-drive-api,google-api-dotnet-client,service-accounts,C#,Google Api,Google Drive Api,Google Api Dotnet Client,Service Accounts,我使用谷歌API网络创建了一个谷歌电子表格,如下所示。我没有收到任何异常,从代码中我也能够检索到文件id。但当我在谷歌硬盘上查看时,我并没有看到这个文件。我应该做些什么来通知谷歌硬盘。我也刷新了我的驱动器。但是没有用。有什么想法吗 我验证了我的服务,如下所示: authenticate.cs public class SerivceAccount { private const string ServiceAccountEmail = "182464555438-@dev

我使用谷歌API网络创建了一个谷歌电子表格,如下所示。我没有收到任何异常,从代码中我也能够检索到文件id。但当我在谷歌硬盘上查看时,我并没有看到这个文件。我应该做些什么来通知谷歌硬盘。我也刷新了我的驱动器。但是没有用。有什么想法吗

我验证了我的服务,如下所示:

authenticate.cs

public class SerivceAccount
    {
        private const string ServiceAccountEmail = "182464555438-@developer.gserviceaccount.com";
        private static readonly X509Certificate2 Certificate = new X509Certificate2("ADExpress.p12", "notasecret", X509KeyStorageFlags.Exportable);

        readonly ServiceAccountCredential _credential = new ServiceAccountCredential(
               new ServiceAccountCredential.Initializer(ServiceAccountEmail)
               {
                   Scopes = new[]
                   {
                       "https://spreadsheets.google.com/feeds",
                       DriveService.Scope.Drive,
                       "https://www.googleapis.com/auth/drive.file"
                   }
               }.FromCertificate(Certificate));

        public bool Authenticate()
        {
            var isAuthenticated = false;
            try
            {
                if (!_credential.RequestAccessTokenAsync(System.Threading.CancellationToken.None).Result)
                    throw new InvalidOperationException("Access token request failed.");
                isAuthenticated = true;
            }
            catch (Exception e)
            {
                Console.WriteLine("Exception in Authenticating " + e.ToString());
            }

            return isAuthenticated;
        }

        public ServiceAccountCredential Credential
        {
            get { return _credential; }
        }

    }
main.cs

var account = new SerivceAccount();
if (account.Authenticate())
            {
    FilesResource.InsertRequest request = service.Files.Insert(new Google.Apis.Drive.v2.Data.File()
                        {
                            Title = "Test",
                            Description = "Test",
                            MimeType = "application/vnd.google-apps.spreadsheet"
                        });
                        var file = request.Execute();
 Console.WriteLine("File ID: " + file.Id);
}

实际上这有助于解决我的问题。我需要提供文件在UI界面中可见的权限。希望这有帮助

Permission newPermission = new Permission();
newPermission.Value = "yourdriveaccount@domain.com";
newPermission.Type = "user";
newPermission.Role = "reader";
service.Permissions.Insert(newPermission, file.Id).Execute();

实际上这有助于解决我的问题。我需要提供文件在UI界面中可见的权限。希望这有帮助

Permission newPermission = new Permission();
newPermission.Value = "yourdriveaccount@domain.com";
newPermission.Type = "user";
newPermission.Role = "reader";
service.Permissions.Insert(newPermission, file.Id).Execute();

您正在使用服务帐户进行身份验证

我也刷新了我的驱动器

检查您自己的Google Drive web版本不会显示由服务帐户创建的文件。服务帐户是它自己的用户。您的文件可能是在服务帐户Google Drive帐户上创建的,您可以通过

示例:

/// <summary>
  /// Retrieve a list of File resources.
  /// </summary>
  /// <param name="service">Drive API service instance.</param>
  /// <returns>List of File resources.</returns>
  public static List<File> retrieveAllFiles(DriveService service) {
    List<File> result = new List<File>();
    FilesResource.ListRequest request = service.Files.List();

    do {
      try {
        FileList files = request.Execute();

        result.AddRange(files.Items);
        request.PageToken = files.NextPageToken;
      } catch (Exception e) {
        Console.WriteLine("An error occurred: " + e.Message);
        request.PageToken = null;
      }
    } while (!String.IsNullOrEmpty(request.PageToken));
    return result;
  }
//
///检索文件资源列表。
/// 
///驱动API服务实例。
///文件资源列表。
公共静态列表检索所有文件(DriveService服务){
列表结果=新列表();
fileResource.ListRequest请求=service.Files.List();
做{
试一试{
FileList files=request.Execute();
result.AddRange(files.Items);
request.PageToken=files.NextPageToken;
}捕获(例外e){
Console.WriteLine(“发生错误:+e.Message”);
request.PageToken=null;
}
}而(!String.IsNullOrEmpty(request.PageToken));
返回结果;
}

为了让其他用户查看该文件,您必须授予他们查看由服务帐户创建的文件的权限。

您正在使用服务帐户进行身份验证

我也刷新了我的驱动器

检查您自己的Google Drive web版本不会显示由服务帐户创建的文件。服务帐户是它自己的用户。您的文件可能是在服务帐户Google Drive帐户上创建的,您可以通过

示例:

/// <summary>
  /// Retrieve a list of File resources.
  /// </summary>
  /// <param name="service">Drive API service instance.</param>
  /// <returns>List of File resources.</returns>
  public static List<File> retrieveAllFiles(DriveService service) {
    List<File> result = new List<File>();
    FilesResource.ListRequest request = service.Files.List();

    do {
      try {
        FileList files = request.Execute();

        result.AddRange(files.Items);
        request.PageToken = files.NextPageToken;
      } catch (Exception e) {
        Console.WriteLine("An error occurred: " + e.Message);
        request.PageToken = null;
      }
    } while (!String.IsNullOrEmpty(request.PageToken));
    return result;
  }
//
///检索文件资源列表。
/// 
///驱动API服务实例。
///文件资源列表。
公共静态列表检索所有文件(DriveService服务){
列表结果=新列表();
fileResource.ListRequest请求=service.Files.List();
做{
试一试{
FileList files=request.Execute();
result.AddRange(files.Items);
request.PageToken=files.NextPageToken;
}捕获(例外e){
Console.WriteLine(“发生错误:+e.Message”);
request.PageToken=null;
}
}而(!String.IsNullOrEmpty(request.PageToken));
返回结果;
}

为了让其他用户查看该文件,您必须授予他们查看服务帐户创建的文件的权限。

服务如何通过身份验证?@DalmTo,我用身份验证请求更新了我的问题。服务如何通过身份验证?@DalmTo,我用身份验证请求更新了我的问题。