2015-03-03 69 views
2

我的目標是獲得C#如何通過DropBoxRest API在C#中獲取Dropbox文件?

我收到以下錯誤由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(); 
+1

你在上面的代碼中出現錯誤? – 2015-03-03 13:28:48

+0

在這一點var令牌= await client.Core.OAuth2.TokenAsync(authCode); – Developer89 2015-03-03 13:31:22

+0

你是如何獲得authCode的? – 2015-03-03 13:34:14

回答

0

首先,當你捕獲異常,你可以得到這個錯誤,更詳細的信息:

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。正如here所提到的,你需要一些東西來識別你自己。您的應用針對OAuth提供商。爲此,您需要提供某種由OAuth提供商向您提供的密鑰。

在Dropbox中,您需要通過console來配置所有內容。

編輯

你必須以產生的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了未處理 消息:類型DropboxRestAPI.Models.Exceptions.ServiceErrorException「未處理的異常出現在mscorlib.dll 附加信息:invalid_grant

JavaScript-documentation of DropBox表示這可能表示錯誤的API。

+0

由你的代碼我看不到錯誤消息,因爲錯誤沒有輸入到catch語句中 – Developer89 2015-03-03 13:41:37

+0

他沒有正確傳遞authCode,因此出現錯誤。還需要知道什麼? – 2015-03-03 13:42:03

+0

我的問題是。我做錯了什麼,我怎麼可以得到authCode – Developer89 2015-03-03 13:51:02

4

您似乎在使用my library,所以我會盡量回復。

Dropbox API使用OAuth 2.0流程,這意味着您需要將用戶重定向到Dropbox頁面進行身份驗證,並批准您的應用程序訪問其數據。

使得調用AuthorizeAsync(注意"code"參數)後:

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

您將收到您可以重定向用戶到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,在瀏覽器中打開它,然後手動檢索代碼。

注意:有幾種方法可以在沒有服務器的情況下工作,但這些方法超出了庫本身的範圍。如果有足夠的需求,我可能會考慮包括他們。

+0

我是那些需要在沒有服務器的情況下進行身份驗證的人(對於Windows應用商店應用),所以這裏是我對該增強的投票! – 2015-04-23 12:30:17

+0

@TyJacobs你可以從我的OneDriveRestAPI https://github.com/saguiitay/OneDriveRestAPI看到一個示例(使用WPF,但我相信你能夠理解它) – SaguiItay 2015-04-24 14:37:39

相關問題