我正在尝试从 Google 驱动器中获取文件列表,我正在使用他们提供的示例:
public static List<File> RetrieveAllFiles(DriveService service)
{
List<File> result = new List<File>();
FilesResource.ListRequest request = service.Files.List();
do
{
try
{
FileList files = request.Fetch();
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;
}
它总是返回文件count = 0
,而我很确定登录的帐户有很多文件!还需要什么东西吗?
编辑: 对于身份验证:
public static IAuthenticator GetCredentials(String authorizationCode, String state)
{
String emailAddress = "";
try
{
IAuthorizationState credentials = ExchangeCode(authorizationCode);
Userinfo userInfo = GetUserInfo(credentials);
String userId = userInfo.Id;
emailAddress = userInfo.Email;
if (!String.IsNullOrEmpty(credentials.RefreshToken))
{
StoreCredentials(userId, credentials);
return GetAuthenticatorFromState(credentials);
}
else
{
credentials = GetStoredCredentials(userId);
if (credentials != null && !String.IsNullOrEmpty(credentials.RefreshToken))
{
return GetAuthenticatorFromState(credentials);
}
}
}
catch (CodeExchangeException e)
{
Console.WriteLine("An error occurred during code exchange.");
// Drive apps should try to retrieve the user and credentials for the current
// session.
// If none is available, redirect the user to the authorization URL.
e.AuthorizationUrl = GetAuthorizationUrl(emailAddress, state);
throw e;
}
catch (NoUserIdException)
{
Console.WriteLine("No user ID could be retrieved.");
}
// No refresh token has been retrieved.
String authorizationUrl = GetAuthorizationUrl(emailAddress, state);
throw new NoRefreshTokenException(authorizationUrl);
}
internal static Google.Apis.Drive.v2.DriveService BuildService(IAuthenticator credentials)
{
return new Google.Apis.Drive.v2.DriveService(credentials);
}
在控制器中
public ActionResult Index(string state, string code)
{
try
{
List<File> files = new List<File>();
IAuthenticator authenticator = Utils.GetCredentials(code, state);
// Store the authenticator and the authorized service in session
Session["authenticator"] = authenticator;
DriveService service = Utils.BuildService(authenticator);
if (authenticator != null && service != null)
{
files = GoogleDriveHelper.RetrieveAllFiles(service);
return View(files);
}
}
catch (CodeExchangeException)
{
if (Session["service"] == null || Session["authenticator"] == null)
{
Response.Redirect(Utils.GetAuthorizationUrl("", state));
}
}
catch (NoRefreshTokenException e)
{
Response.Redirect(e.AuthorizationUrl);
}
return View();
}