DropNet 无法为后续请求保存访问令牌?

DropNet unable to save Access Token for consequent requests?

和我之前的许多人一样,我在应用程序启动之间成功保存访问令牌失败得很惨。该应用程序实际上只会与一个特定的保管箱帐户一起使用,尽管我正在努力使其易于设置且更具动态性。

当然,如果设置为空(初始运行),用户可以正确登录并授权该应用程序,并返回到它按预期工作的应用程序。然而,在随后的 运行 秒中,当它从设置集合中获取令牌和秘密时,它会悲惨地失败并返回

Received Response [Unauthorized] : Expected to see [OK]. The HTTP response was [{"error": "Invalid signature."}].

我显然做错了什么,这是什么?谢谢!

代码如下!

using System;
using DropNet;

namespace DS_Uploader_DropBox {
    class Program {
        private const string AppKey = "my super secret app key";
        private const string AppSecret = "my super secret app secret";

        static void Main(string[] args) {
            DropNetClient client;
            DropNet.Models.UserLogin token;

            string userToken = Settings.Default.userToken;
            string userSecret = Settings.Default.userSecret;

            bool needAccessToken = (String.IsNullOrEmpty(userToken) || string.IsNullOrEmpty(userSecret));

            //needAccessToken = true;

            if (needAccessToken) {
                client = new DropNet.DropNetClient(AppKey, AppSecret);
                client.UseSandbox = true;
                client.GetToken();

                // Auth with dropbox
                var url = client.BuildAuthorizeUrl();

                // Prompt for user to auth
                Console.WriteLine("go auth here " + url);
                Console.ReadLine();

                // If the user authed, let's get that token
                try {
                    token = client.GetAccessToken();
                }
                catch (Exception e) {
                    Console.WriteLine("Exception! " + e.Message);
                    return;
                }

                // save for later
                userToken = token.Token;
                userSecret = token.Secret;
                Settings.Default.userToken = userToken;
                Settings.Default.userSecret = userSecret;
                Settings.Default.Save();

            } else {
                client = new DropNet.DropNetClient(AppKey, AppSecret, userToken, userSecret);
                client.UseSandbox = true;
                client.GetToken();

                // get that token
                try {
                    token = client.GetAccessToken();
                } catch (Exception e) {
                    Console.WriteLine("Exception! " + e.Message);
                    return;
                }
            }

            var acctInfo = client.AccountInfo();
            Console.WriteLine(acctInfo.display_name);
            Console.ReadLine();
        }
    }
}

遵循的代码:

using System;
using DropNet;

namespace DS_Uploader_DropBox {
    class Program {
        private const string AppKey = "my super secret app key";
        private const string AppSecret = "my super secret app secret";

        static void Main(string[] args) {
            DropNetClient client;
            DropNet.Models.UserLogin token;

            string userToken = Settings.Default.userToken;
            string userSecret = Settings.Default.userSecret;

            bool needAccessToken = (String.IsNullOrEmpty(userToken) || string.IsNullOrEmpty(userSecret));

            //needAccessToken = true;

            if (needAccessToken) {
                client = new DropNet.DropNetClient(AppKey, AppSecret);
                client.UseSandbox = true;
                client.GetToken();

                // Auth with dropbox
                var url = client.BuildAuthorizeUrl();

                // Prompt for user to auth
                Console.WriteLine("go auth here " + url);
                Console.ReadLine();

                // If the user authed, let's get that token
                try {
                    token = client.GetAccessToken();
                }
                catch (Exception e) {
                    Console.WriteLine("Exception! " + e.Message);
                    return;
                }

                // save for later
                userToken = token.Token;
                userSecret = token.Secret;
                Settings.Default.userToken = userToken;
                Settings.Default.userSecret = userSecret;
                Settings.Default.Save();

            } else {
                client = new DropNet.DropNetClient(AppKey, AppSecret, userToken, userSecret);
                client.UseSandbox = true;
            }

            var acctInfo = client.AccountInfo();
            Console.WriteLine(acctInfo.display_name);
            Console.ReadLine();
        }
    }
}

needAccessToken 为假的代码路径中,您再次调用 GetTokenGetAccessToken,以尝试获取新的请求令牌和新的访问令牌,分别。这是不必要的,因为您已经拥有并检索了 userTokenuserSecret.

中的现有访问令牌