我试图在我的网站上实现文件上传到Dropbox。但是,在用户点击授权我的应用后,我无法获取accessToken。
以下是我获取URL的代码,该代码返回给客户端以在Javascript中打开一个新窗口。
[WebMethod]
public String setUpDropboxOA(String uri, Int32 form_id, String user_auth)
{
var client = new DropNetClient("xxxxxxxxx", "xxxxxxxxx");
return client.GetTokenAndBuildUrl(uri);
}
这是我的回调函数:
[WebMethod]
public void AuthorizeDropboxCallback(String oauth_token)
{
var client = new DropNetClient("xxxxxxxxx", "xxxxxxxxx");
var accessToken = client.GetAccessToken();
var jsonObj = new { oauth_token = accessToken.Token, oauth_secret = accessToken.Secret };
var JSONAuthorizationData = JsonConvert.SerializeObject(jsonObj);
saveNotification(form_hash, "Dropbox", JSONAuthorizationData, user_id);
}
以下是我在客户端上遇到的错误.GetAccessToken():
Exception of type 'DropNet.Exceptions.DropboxException' was thrown.
DropNet的文档说GetAccessToken存在过载,允许您指定要使用的令牌,但是,我没有看到。我觉得这是问题所在,但我并不完全确定。
答案 0 :(得分:1)
正如@ albattran的回答所示,这是因为您正在创建DropNetClient的2个不同实例。
client.GetTokenAndBuildUrl(uri);
这种方法实际上做了两件事。 1,对Dropbox进行API调用以获取请求令牌,然后使用该请求令牌创建登录URL。
要解决此问题,您需要一种在Web请求之间存储该请求令牌的方法。
也许可以使用会话来考虑类似下面的内容。
var userToken = client.GetToken();
Session["user_token"] = userToken.Token;
Session["user_secret"] = userToken.Secret;
然后确定回调读取那些会话变量并将它们添加到DropNetClient的构造函数重载中。
var token = Session["user_token"];
var secret = Session["user_secret"];
var client = new DropNetClient("XXXX", "XXXX", token, secret);
client.GetAccessToken();
答案 1 :(得分:0)
我认为您的问题是在不同请求之间丢失DropNetClient实例的结果,您创建了两个DropNetClient实例。
您需要保留初始令牌格式GetTokenAndBuildUrl并在调用GetAccessToken时将其恢复。
因为oAuth是3个步骤: