[英]DropNet DropBox login, how to do it programmatically in a console application?
[英]DropNet Login Test
所以我只是在為正在開發的新.net應用程序測試DropNet客戶端,而我只是想通過這樣做登錄
private void button1_Click(object sender, EventArgs e)
{
_client.GetTokenAsync((userLogin) =>
{
},
(error) =>
{
MessageBox.Show("Error getting Token");
});
var uLogin = _client.GetToken();
var url = _client.BuildAuthorizeUrl(uLogin);
System.Diagnostics.Process.Start(url);
_client.GetAccessTokenAsync((accessToken) =>
{
},
(error) =>
{
MessageBox.Show("Error getting Access Token");
});
}
然后嘗試通過執行以下操作在消息框中顯示我的帳戶信息:
private void button2_Click(object sender, EventArgs e)
{
_client.AccountInfoAsync((accountInfo) =>
{
MessageBox.Show(accountInfo.ToString());
},
(error) =>
{
MessageBox.Show("Error displaying data");
}
);
}
單擊按鈕2時顯示錯誤消息。
我還聲明了我的DropNetClient _Client = new DropNetClient("API KEY", "API SECRET");
在全班最高。
有什么建議么?
您正在將異步調用視為同步調用。
每個異步調用都需要等待上一個返回,然后才能繼續。
這是通過利用每個異步調用的成功Action來完成的,對於Process.Start()而言,使用Process.WaitForExit()進行調用,然后再繼續。
最后,由於並非所有瀏覽器都返回一個進程(例如Chrome),因此Process.Start()必須顯式使用iexplore。
public string UserToken { get; set; }
public string UserSecret { get; set; }
private DropNetClient _Client;
public DropNetClient Client
{
get
{
if (_Client == null)
{
_Client = new DropNetClient(AppKey, AppSecret);
if (IsAuthenticated)
{
_Client.UserLogin = new UserLogin
{
Token = UserToken,
Secret = UserSecret
};
}
_Client.UseSandbox = true;
}
return _Client;
}
}
public bool IsAuthenticated
{
get
{
return UserToken != null &&
UserSecret != null;
}
}
public void Authenticate(Action<string> success, Action<Exception> failure)
{
Client.GetTokenAsync(userLogin =>
{
var url = Client.BuildAuthorizeUrl(userLogin);
if (success != null) success(url);
}, error =>
{
if (failure != null) failure(error);
});
}
public void Authenticated(Action success, Action<Exception> failure)
{
Client.GetAccessTokenAsync((accessToken) =>
{
UserToken = accessToken.Token;
UserSecret = accessToken.Secret;
if (success != null) success();
},
(error) =>
{
if (failure != null) failure(error);
});
}
private void button1_Click(object sender, EventArgs e)
{
Authenticate(
url => {
var proc = Process.Start("iexplore.exe", url);
proc.WaitForExit();
Authenticated(
() =>
{
MessageBox.Show("Authenticated");
},
exc => ShowException(exc));
},
ex => ShowException(ex));
}
private void button2_Click(object sender, EventArgs e)
{
Client.AccountInfoAsync((a) =>
{
MessageBox.Show(a.display_name);
},
ex => ShowException(ex));
}
private void ShowException(Exception ex)
{
MessageBox.Show(ex.ToString());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.