We're making changes to the Community, so you may have received some notifications - thanks for your patience and welcome back. Learn more here.
Forum Discussion
gagsbh
2 months agoHelpful | Level 5
File Download API Exception
Hello Greg-DB
Recently, there were changes made in the code related to Dropbox Teamspaces.
We are now facing errors sometimes when we download files that were notified with file paths by webhooks.
Using webhooks, we obtain the path of the recently added file in the account and then download using Dropbox APIs.
In the below case, the file added is /Boolean Array/Boolean Array/12/SOBR10.png
Error Details:
File Path: /Boolean Array/Boolean Array/12/SOBR10.png
Error Message: no_permission/.
Stack Trace:
no_permission/.
at Dropbox.Api.DropboxRequestHandler.<RequestJsonString>d__20.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
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.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Dropbox.Api.DropboxRequestHandler.<Dropbox-Api-Stone-ITransport-SendDownloadRequestAsync>d__14`3.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at Dropbox.Ongoing.FetchBiz.Service1.<Download>d__40.MoveNext() in Ongoing.Fetch.cs:line 2321
Code Snippet:
//token is OAuth token generated by OAuth authentication grant provided by Team Admin
using (DropboxTeamClient teamclient = new DropboxTeamClient(token, appkey, appsecret))
{
DropboxClient clientadmin = teamclient.AsMember(dropboxid);
//dropboxid can be id of admin or normal user
Api.Users.FullAccount acc = await clientadmin.Users.GetCurrentAccountAsync();
string rootnamespace = "";
if (acc != null && acc.RootInfo != null && acc.RootInfo.RootNamespaceId != null)
{
rootnamespace = acc.RootInfo.RootNamespaceId;
clientadmin = clientadmin.WithPathRoot(new PathRoot.NamespaceId(rootnamespace));
//Below is Line 2321
using (var response = await clientadmin.Files.DownloadAsync(path))
{
....
}
}
}
Can you please help us with this issue?
Thanks,
Gagan
Thanks for following up. To be clear, you should not be adding "/root" to the path itself, as that's not a path component (unless some user/app literally made a folder named "root"). You can use PathRoot.Root with a root namespace ID just like you used PathRoot.NamespaceId.
That is, modifying your original code, that would look like:
clientadmin = clientadmin.WithPathRoot(new PathRoot.Root(rootnamespace));
- Greg-DBDropbox Staff
I see you're attempting to access the user's root namespace, in which case it's generally best to use the PathRoot.Root mode instead of PathRoot.NamespaceId. Please give that a try and let me know what you get.
- gagsbhHelpful | Level 5
Thank you for your reply.
How do I use PathRoot.Root mode in my c# code.
I changed the path parameter in my existing code from /Boolean Array/12/SOBR10.png, it gives error 'Path not found'.
to /root/Boolean Array/12/SOBR10.png
Then I tried changing the code:
using (var response = await dbx.Files.DownloadAsync(new Dropbox.Api.Files.DownloadArg(dropboxFilePath, pathRoot: new Dropbox.Api.PathRoot { Tag = Dropbox.Api.PathRoot.Tag.Root })))
Visual Studio gave compilation error:
The type or namespace name 'PathRoot' does not exist in the namespace 'Dropbox.Api' (are you missing an assembly reference?)
The best overload for 'DownloadArg' does not have a parameter named 'pathRoot'
Please suggest.
Thanks,
Gagan
- Greg-DBDropbox Staff
Thanks for following up. To be clear, you should not be adding "/root" to the path itself, as that's not a path component (unless some user/app literally made a folder named "root"). You can use PathRoot.Root with a root namespace ID just like you used PathRoot.NamespaceId.
That is, modifying your original code, that would look like:
clientadmin = clientadmin.WithPathRoot(new PathRoot.Root(rootnamespace));
About Dropbox API Support & Feedback
Find help with the Dropbox API from other developers.
5,875 PostsLatest Activity: 2 months agoIf you need more help you can view your support options (expected response time for an email or 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!