访问令牌密钥和秘密在DropNet中不起作用

时间:2012-05-31 11:41:05

标签: c# oauth dropbox dropnet

我正在使用DropNet for Dropbox OAuth,但我有一个主要问题 - 我无法存储访问令牌密钥和秘密,因为没有点存储它们。存储机制不是问题,而不是一个关键问题 - 问题在于:

private void dropboxUpload()
{
    DropNetClient _Dclient = new DropNetClient("xxxxxxxxxxxxxxx", "yyyyyyyyyyyyyyy");
    _Dclient.UseSandbox = true;
    if (!dropboxLoggedIn)
    {
            _Dclient.GetToken();
            string url = _Dclient.BuildAuthorizeUrl();
            Process.Start(url);
            if (MessageBox.Show("Click OK after you have allowed Sizester to create and access a sub-folder called Sizester in a folder called Apps in your Dropbox account.", "Sizester access request", MessageBoxButtons.OKCancel) != System.Windows.Forms.DialogResult.OK)
            {
                return;
            }
        }
        try
        {
            if (!dropboxLoggedIn)
            {
                _Dclient.GetAccessToken();
                dropboxAsecret = _Dclient.UserLogin.Secret;
                dropboxAtoken = _Dclient.UserLogin.Token;
            }
            else
            {
                _Dclient.UserLogin.Token = dropboxAtoken;
                _Dclient.UserLogin.Secret = dropboxAsecret;
            }
            dropboxLoggedIn = true;
            //...
            _Dclient.UploadFile("/", fileE, FileToByteArray(newFilePath));
            MessageBox.Show("Successfully uploaded to Dropbox.", "Uploaded to Dropbox");
        }
        catch (Exception dropboxEx)
        {
            MessageBox.Show("Error: " + dropboxEx.Message);
        }
    }

这里的问题是 - 第一次上传确定,但第二次没有 - 虽然dropboxLoggedIn为真,并且访问令牌密钥和秘密存储正常,但它不上传文件,但更奇怪的是它没有不返回任何错误或异常。 如果我移动GetToken,如果同样的事情发生。我知道我做错了什么,但我不能到达哪里。 我已经对文件路径的某些部分进行了条带化​​处理,并获取了与之无关的文件。 我为Twitter做了同样的事情,但它没有任何问题。 有什么想法吗?

3 个答案:

答案 0 :(得分:1)

此链接应该有助于解决该问题: http://forums.dropbox.com/topic.php?id=61115&replies=6

基本上,您需要从Upload File方法初始化DropNetClient _Dclient实例。当您获得访问令牌时,您应该将其保存在会话或配置文件中,并且每次上传文件时都不需要这样做。

答案 1 :(得分:1)

从第3行看起来让你烦恼:if (!dropboxLoggedIn)

所以,只有当用户没有登录时才会继续,但是在第二次尝试时你的说法应该是真的,从而跳过所有上传代码。

答案 2 :(得分:1)

好的,问题在于对象的初始化 - 如果你这样做:

DropNetClient _Dclient = new DropNetClient("xxxxxxxxxxxxxxx", "yyyyyyyyyyyyyyy");
_Dclient.UseSandbox = true;
_Dclient.UserLogin.Token = "zzzzzzzzzzzzzzz";
_Dclient.UserLogin.Secret = "wwwwwwwwwwwwww";

这不起作用 - 而是需要像这样初始化:

DropNetClient _Dclient = new DropNetClient("xxxxxxxxxxxxxxx", "yyyyyyyyyyyyyyy","zzzzzzzzzzzzzzz","wwwwwwwwwwwwww");
_Dclient.UseSandbox = true;

我不确定在某些文档或论坛中我找到第一个代码示例的位置,但这是错误的。如果您使用它 - 不会发生错误或异常,但不会完成Dropbox文件上传或操作。如果你使用第二个,那么一切都会有效。