2012-02-21 2 views
2

Я работаю над веб-приложением, и я хочу предоставить своим пользователям возможность подключиться к личной учетной записи Dropbox. Я создам браузер файлов и папок, но я хочу иметь доступ к ним в первую очередь.Подключение веб-приложения ASP.NET к Dropbox

У меня есть ApiKey и ApiSecret из Dropbox для моего приложения.

Я попытался использовать рамки C#, но я думаю, что они предназначены для настольных/winform/консольных/мобильных приложений.

Я смог получить request_token, но я не могу получить access_token.

Может кто-нибудь пролить свет на этот вопрос? (работа с Dropbox API с веб-приложением ASP.NET).

ответ

1

Я нашел идеальное решение. Я использовал библиотеку SharpBox .NET ...

Я играл с ним, и я смог прочитать папки, получить файлы, прочитать содержимое файла для загрузки и многое другое!

0

Я не уверен, как работать с Dropbox, но мое приложение работает с www.DriveHQ.com, отлично работает, DriveHQ предоставляет мне частный веб-сайт, это потрясающе.

0

Вот пример (с использованием ASP MVC4 и SharpBox .NET), который показывает приятную демонстрацию.

Сначала он пытается загрузить токен доступа из файла в App_Data. Если он есть, используйте токен, чтобы прочитать папку приложения в Dropbox.

Если он отсутствует, проверьте, есть ли токен запроса в текущем сеансе. Если он доступен, пользователь может предоставить разрешение веб-приложению на доступ к своему Dropbox, поэтому попробуйте включить токен запроса в токен доступа.

Если маркер запроса отсутствует, создайте его, сохраните его в сеансе и перенаправьте пользователя на Dropbox, чтобы он получил запрос на предоставление веб-приложениям доступа к своей папке.

Примечание: код является демонстрационным. Чтобы превратить его в многопользовательский и реальный сценарий, вам нужно будет хранить файл токена доступа для каждого пользователя, и вы должны кэшировать токен доступа в кеше сеанса, чтобы предотвратить избыточное чтение файла токена доступа.

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; 
    } 
} 
Смежные вопросы