Dropbox API Support & Feedback
Find help with the Dropbox API from other developers.
my application support old dropbox and the new one.
when creating the client i am creating it like this
client = new DropboxTeamClient(request.AccessToken, request.RefreshToken,request.Expires,ClientId,ClientSecret);
and then using it
in this way
first Way
var members = await client.Team.MembersListAsync().ConfigureAwait(false);
and this way
Second Way
var account = await client.AsMember(request.AsMember).Users.GetCurrentAccountAsync();
var clientNew= client.AsMember(request.AsMember).WithPathRoot(new PathRoot.Root(account.RootInfo.RootNamespaceId));
var folders = await spaceclient.Files.ListFolderAsync(folderId);
my issue is after 4 hours when the token is expired
When i calling the first way i am getting an error
Response status code does not indicate success: 400 (Bad Request).
at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
at Dropbox.Api.DropboxRequestHandler.<RefreshAccessToken>d__15.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Dropbox.Api.DropboxRequestHandler.<CheckAndRefreshAccessToken>d__21.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Dropbox.Api.DropboxRequestHandler.<RequestJsonStringWithRetry>d__18.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Dropbox.Api.DropboxRequestHandler.<Dropbox-Api-Stone-ITransport-SendRpcRequestAsync>d__12`3.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
at MaaS.Systems.Dropbox.Service.DropboxService.<GetUsersAsync>d__26.MoveNext() in C:\development\CloudSfer\Systems\MaaS.Systems.Dropbox\Service\DropboxService.cs:line 157
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
at MaaS.Systems.Dropbox.DropboxServiceExtender.<GetHierarchy>d__7.MoveNext() in C:\development\CloudSfer\Systems\MaaS.Systems.Dropbox\DropboxServiceExtender.cs:line 126
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at MaaS.Web.Controllers.Api.DropboxController.<TreeViewNodes>d__7.MoveNext() in C:\development\CloudSfer\MaaS.Web\Controllers\Api\DropboxController.cs:line 175
it is look like it is failing on refreshing token .
the problem is that this request is not exist in the new client
Team.MembersListAsync(). not exist in the new client
please advice 🙂
Any Update Please
maybe this method client.Team.MembersListAsync() not handling as it should with the refresh token
The first way looks correct, and that code is working for me when I supply valid credentials. Make sure you're supplying the correct and valid values. For example, make sure:
For the second way, it is expected that "clientNew" would not have the MembersListAsync method, since the MembersListAsync method is only available on DropboxTeamClient instances, not DropboxClient instances. The AsMember method returns a DropboxClient instance to operate on a specific member, not the whole team. The WithPathRoot method sets the root for the files calls made by the client. Neither of these control the refresh process.
ok, but if i am calling the first way
i am getting the error.
I am trying to understand.
after 4 hours i am creating the dropbox team client with all the correct data(access,refresh,secret etc..).
but getting an error
can you try and reproduce it .
create a new token with 4 hours.
then wait 4 hours and then call the new dropbox team client with the token then you get before and call the client.Team.MembersListAsync()
i even try to call the refresh token method manually but this didn't work also
need your help 🙂
Yes, I tried the code you shared, plugging in valid refresh token, etc. values, and it worked for me.
Please review the list in my previous message for reasons why that would fail for you. Check and update your values as necessary to make sure you're providing correct and valid refresh token, etc. credentials.
i an not understand and will need more assistance.
in my up i am always using the DropboxTeamClient creating it with all the necessary parameters
like this.
var client = new DropboxTeamClient(request.AccessToken, request.RefreshToken, request.Expires, ClientId, ClientSecret);
now after that i am checking if the client is in the new space or the old one
like this
var account = await client.AsMember(request.AsMember).Users.GetCurrentAccountAsync();
var spaceclient = client.AsMember(request.AsMember).WithPathRoot(new PathRoot.Root(account.RootInfo.RootNamespaceId));
if (account.RootInfo.IsTeam)
{
metadata = await spaceclient.Files.ListFolderAsync(folderId);
}
else
{
metadata = await client.AsMember(request.AsMember).Files.ListFolderAsync(folderId)
}
now sometimes i need to call this
client.Team.MembersListAsync().ConfigureAwait(false);
and befoe every call i am calling the
var client = new DropboxTeamClient(request.AccessToken, request.RefreshToken, request.Expires, ClientId, ClientSecret);
and I need it because that sometimes i am handing for the same client al the data content and all the user and groups as well
and my issue is that after the token is expire i am getting the error that was in the first message .
400 error
i am really need to get to the bottom of this and understand is completely
Thank you
Hi @Omri1984,
Can you just print (or display somehow) content of "request.RefreshToken"? Is there something that looks like valid refresh token or not exactly? 🧐
Hope this gives direction.
something like this
ZEaFs***lgUAAAAAAAAAARUCp-9WwOK************************PIUr3P72**********Eg
does it make sense ?
Hi again @Omri1984,
To be honest I expected your token empty, but it seems Ok, at least. Let's see is it really Ok or not actually. Execute following command in terminal:
curl https://api.dropbox.com/oauth2/token -d grant_type=refresh_token -d refresh_token=ZEaFs***lgUAAAAAAAAAARUCp-9WwOK************************PIUr3P72**********Eg -u 12APP_KEY3HERE45:abcAPP_SECRETdHEREefg
Place actual values on their corresponding places. You can use other standalone HTTP client, able to perform such a request, if curl is missing or inconvenient for your. Does the command completes successfully or gives back error (if error, what kind of error - post the result)?
will test it,
if i am asing a token with the business app or with the user app does the token is different between ?
The token itself (both refresh and access) no (the above call is NOT affected). You have to take this in mind when actual API calls are performed (adding additional headers, whenever and if needed, on business account - as you are doing). That's it.
Hi there!
If you need more help you can view your support options (expected response time for a ticket is 24 hours), or contact us on X or Facebook.
For more info on available support options for your Dropbox plan, see this article.
If you found the answer to your question in this Community thread, please 'like' the post to say thanks and to let us know it was useful!