如何在C#中通过DropBoxRest API获取Dropbox文件



我的目标是通过C#中的DropBoxRest API获取文件

当我想获得代币时,我得到了以下错误

中发生类型为"System.AggregateException"的未处理异常mscorlib.dll

我做错了什么?

这是我的代码

    var options = new Options
{
ClientId = "", //App key
ClientSecret = "", //App secret
RedirectUri = "https://www.dropbox.com/1/oauth2/authorize"
};
        // Initialize a new Client (without an AccessToken)
        var client = new Client(options);
        // Get the OAuth Request Url
        var authRequestUrl = await client.Core.OAuth2.AuthorizeAsync("");
        // TODO: Navigate to authRequestUrl using the browser, and retrieve the Authorization Code from the response
        var authCode = ""; Which code have to be here ???
        // Exchange the Authorization Code with Access/Refresh tokens
        var token = await client.Core.OAuth2.TokenAsync(authCode); in this line occured the following error
          //An unhandled exception of type 'System.AggregateException' occurred in mscorlib.dll      
        // Get account info
        var accountInfo = await client.Core.Accounts.AccountInfoAsync();

您似乎在使用我的库,所以我会尝试响应。

Dropbox API使用OAuth 2.0流,这意味着您需要将用户重定向到Dropbox页面进行身份验证,并批准您的应用程序访问他们的数据。

调用AuthorizeAsync(注意"code"参数)后:

var authRequestUrl = await client.Core.OAuth2.AuthorizeAsync("code");

您将收到一个URL,可以将用户重定向到该URL。该URL将在Dropbox中打开一个页面以进行身份验证和批准。之后,用户将被重定向回您在选项中的RedirectUri中提供的URL。重定向将在URL的查询字符串中包含代码。

这意味着你应该有一个服务器,它将监听你的RedirectUri。例如:

var options = new Options
    {
        ClientId = "", //App key
        ClientSecret = "", //App secret
        RedirectUri = "https://www.myserver.com/Dropbox/SetCode"
    };

如果你使用MVC,你可能会在控制器中有一个动作,如下所示:

public class DropboxController : Controller
{
    public ActionResult SetCode(string code, string error) {}
}

一旦检索到code,就可以调用TokenAsync():

var token = await client.Core.OAuth2.TokenAsync(authCode);

您的代码基于我的库中的示例,该示例要求您手动复制authRequestUrl,在浏览器中打开它,然后手动检索代码。

注意:有几种方法可以在没有服务器的情况下工作,但这些方法超出了库本身的范围。如果有足够的需求,我可能会考虑把它们包括在内。

首先,当您捕获异常时,您可以获得有关此错误的更多详细信息:

try
{
    var token = await client.Core.OAuth2.TokenAsync(authCode);
}
catch (AggregateException aex)
{
    // set a breakpoint on the opening curly brace and check the
    // variable "aex".
}

第二件事是,您需要一组秘密来执行OAuth。正如这里提到的,你需要一些东西来识别你自己。您的应用程序对抗OAuth提供商。为此,您需要提供OAuth提供程序提供给您的某种密钥。

在Dropbox,您需要通过控制台配置所有内容。

编辑

你必须在DropBox AppConsole上生成一个访问令牌,你可以直接将其传递给客户端选项:

var options = new Options
{
    ClientId = "{see console}", //App key
    ClientSecret = "{see console}", //App secret
    AccessToken = "{see console}",
    RedirectUri = "{see console}"
};
var client = new Client(options);

在这种情况下,默认情况下不需要获取令牌。

由于投了反对票,我把它调试好了。我可以得到异常详细信息,说明如下:

DropboxRestAPI.Models.Exceptions.ServiceErrorException未处理消息:mscorlib.dll中出现"DropboxRestAPI.Models.Exceptions.ServiceErrorException"类型的未处理异常附加信息:invalid_grant

DropBox的JavaScript-documentation声明这可能指示错误的API。

最新更新