You might see that the Dropbox Community team have been busy working on some major updates to the Community itself! So, here is some info on what’s changed, what’s staying the same and what you can expect from the Dropbox Community overall.

Forum Discussion

gagsbh's avatar
gagsbh
Helpful | Level 5
2 months ago

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-DB's avatar
    Greg-DB
    Icon for Dropbox Staff rankDropbox 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.

    • gagsbh's avatar
      gagsbh
      Helpful | Level 5

      Greg-DB 

       

      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-DB's avatar
        Greg-DB
        Icon for Dropbox Staff rankDropbox 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

Node avatar for Dropbox API Support & Feedback

Find help with the Dropbox API from other developers.

5,882 PostsLatest Activity: 3 years ago
325 Following

If 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!