我正在编写一个程序,允许用户上传文件到他们的Google Drive帐户。我已经实现了上传部分,并使用OAuth2。我目前遇到的问题是从用户的Drive帐户获取文件夹列表。
我找到了一些代码,据说可以使用.setUserCredentials方法来实现,但它不起作用:
具体而言,我得到了“执行请求失败:https://docs.google.com/feeds/default/private/full/-/folder - 远程服务器返回错误:(401) 未经授权"。
我还尝试过:
但是,“State”始终为空,所以我会得到一个空对象错误。我做错了什么?应该怎么做呢?
我找到了一些代码,据说可以使用.setUserCredentials方法来实现,但它不起作用:
DocumentsService service1 = new DocumentsService("project");
service1.setUserCredentials("user","pass");
FolderQuery query1 = new FolderQuery();
// Make a request to the API and get all documents.
DocumentsFeed feed = service1.Query(query1);
// Iterate through all of the documents returned
foreach (DocumentEntry entry in feed.Entries)
{
var blech = entry.Title.Text;
}
没有返回任何内容。理想情况下,我希望使用OAuth2来完成这个任务。我一直在尝试以下代码,试图设置身份验证令牌,但我总是被拒绝访问:
String CLIENT_ID = "clientid";
String CLIENT_SECRET = "secretid";
var docprovider = new NativeApplicationClient(GoogleAuthenticationServer.Description, CLIENT_ID, CLIENT_SECRET);
var docstate = GetDocAuthentication(docprovider);
DocumentsService service1 = new DocumentsService("project");
service1.SetAuthenticationToken(docstate.RefreshToken);
FolderQuery query1 = new FolderQuery();
DocumentsFeed feed = service1.Query(query1); //get error here
// Iterate through all of the documents returned
foreach (DocumentEntry entry in feed.Entries)
{
// Print the title of this document to the screen
var blech = entry.Title.Text;
}
..
private static IAuthorizationState GetDocAuthentication(NativeApplicationClient client)
{
const string STORAGE = "storagestring";
const string KEY = "keystring";
string scope = "https://docs.google.com/feeds/default/private/full/-/folder";
// Check if there is a cached refresh token available.
IAuthorizationState state = AuthorizationMgr.GetCachedRefreshToken(STORAGE, KEY);
if (state != null)
{
try
{
client.RefreshToken(state);
return state; // Yes - we are done.
}
catch (DotNetOpenAuth.Messaging.ProtocolException ex)
{
}
}
// Retrieve the authorization from the user.
state = AuthorizationMgr.RequestNativeAuthorization(client, scope);
AuthorizationMgr.SetCachedRefreshToken(STORAGE, KEY, state);
return state;
}
具体而言,我得到了“执行请求失败:https://docs.google.com/feeds/default/private/full/-/folder - 远程服务器返回错误:(401) 未经授权"。
我还尝试过:
var docauth = new OAuth2Authenticator<NativeApplicationClient>(docprovider, GetDocAuthentication);
DocumentsService service1 = new DocumentsService("project");
service1.SetAuthenticationToken(docauth.State.AccessToken);
但是,“State”始终为空,所以我会得到一个空对象错误。我做错了什么?应该怎么做呢?