2012-02-21 21 views
2

我正在開發一個web應用程序,我想讓我的用戶能夠連接個人Dropbox帳戶。 我將構建文件和文件夾瀏覽器,但我希望能夠先訪問它們。連接到Dropbox的ASP.NET web應用程序

我有我的應用程序從Dropbox的ApiKey和ApiSecret。

我試圖使用C#框架,但我認爲這些是爲桌面/ winform /控制檯/移動應用程序。

我能夠得到request_token,但我無法獲得access_token。

有人可以請說一說這個問題? (使用帶有ASP.NET Web應用程序的Dropbox API)。

回答

1

我找到了完美的解決方案。 我用SharpBox .NET庫...

我玩它,我能夠讀取文件夾,獲取文件,閱讀文件內容下載和更多!

0

我不確定如何使用Dropbox,但我的應用程序正在與www.DriveHQ.com合作,完美地工作,DriveHQ爲我提供了一個私人網站,這真是太棒了。

0

下面是一個示例(使用ASP MVC4和SharpBox .NET),它演示了一個很好的演示。

首先它嘗試從App_Data中的文件加載訪問令牌。如果它在那裏,使用令牌讀取保存箱中的應用程序文件夾。

如果不在那裏,請查看當前會話中是否有請求令牌。如果可用,用戶可能已授予Web應用程序訪問其保管箱的權限,因此請嘗試將請求令牌轉換爲訪問令牌。

如果沒有請求令牌,創建它,將其存儲在會話中並將用戶重定向到Dropbox,以便提示他讓Web應用程序訪問他的文件夾。

注意:代碼是演示。要將其變爲多用戶且真實的場景,您需要爲每個用戶存儲訪問令牌文件,並且應該將訪問令牌緩存在會話緩存中,以防止讀取訪問令牌文件過多。

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     string tokenFile = Path.Combine (Server.MapPath("~/App_Data"), "AccessTokens/dropbox.xml"); 
     string appKey = "<<appkey>>"; 
     string appSecret = "<<appsecret>>"; 
     ICloudStorageAccessToken accessToken; 
     CloudStorage storage = new CloudStorage(); 

     DropBoxConfiguration config = 
      CloudStorage.GetCloudConfigurationEasy(nSupportedCloudConfigurations.DropBox) as DropBoxConfiguration; 

     if (TryLoadAccessToken(tokenFile, storage, out accessToken)) 
     { 
      storage.Open(config, accessToken); 
      var appFolder = storage.GetRoot(); 

      var folderContent = new List<Tuple<string, bool>>(); 
      foreach (var entry in appFolder) 
      { 
       bool isFolder = entry is ICloudDirectoryEntry; 
       folderContent.Add(new Tuple<string, bool>(entry.Name, isFolder)); 
      } 
      ViewBag.FolderContent = folderContent; 
     } 
     else 
     { 
      ICloudStorageAccessToken requestToken; 
      if (TryLoadRequestToken(out requestToken)) 
      { 
       if (requestToken is DropBoxRequestToken) 
       { 
        accessToken = 
         DropBoxStorageProviderTools.ExchangeDropBoxRequestTokenIntoAccessToken(
          config, appKey, appSecret, (DropBoxRequestToken)requestToken); 

        storage.Open(config, accessToken); 

        using (FileStream fs = System.IO.File.Create(tokenFile)) 
        { 
         storage.SerializeSecurityTokenToStream(accessToken, fs); ; 
        } 
       } 
       else 
       { 
        throw new Exception("The request token is not from Dropbox."); 
       } 
      } 
      else 
      { 
       config.AuthorizationCallBack = new Uri("http://localhost:57326/"); 

       requestToken = DropBoxStorageProviderTools.GetDropBoxRequestToken(config, appKey, appSecret); 

       Session["dropboxRequestToken"] = requestToken; 

       String url = DropBoxStorageProviderTools.GetDropBoxAuthorizationUrl(
        config, (DropBoxRequestToken)requestToken); 

       return new RedirectResult(url); 
      } 
     } 

     return View(); 
    } 

    private bool TryLoadRequestToken(out ICloudStorageAccessToken requestToken) 
    { 
     requestToken = Session["dropboxRequestToken"] as ICloudStorageAccessToken; 
     return requestToken != null; 
    } 

    private bool TryLoadAccessToken(string tokenFile, CloudStorage storage, out ICloudStorageAccessToken accessToken) 
    { 
     accessToken = null; 
     try 
     { 
      using (FileStream fileStream = 
        System.IO.File.Open(tokenFile, FileMode.Open, FileAccess.Read, FileShare.None)) 
      { 
       accessToken = storage.DeserializeSecurityToken(fileStream); 
      } 
     } 
     catch 
     { 

     } 

     return accessToken != null; 
    } 
} 
相關問題