2

Web アプリケーションを開発していますが、ユーザーが個人の Dropbox アカウントに接続できるようにしたいと考えています。ファイルとフォルダーのブラウザーを構築しますが、最初にそれらにアクセスできるようにしたいと考えています。

アプリケーション用に Dropbox から ApiKey と ApiSecret を取得しています。

C# フレームワークを使用しようとしましたが、それらはデスクトップ/winform/コンソール/モバイル アプリケーション用だと思います。

request_token は取得できましたが、access_token を取得できません。

誰かがこの問題に光を当てることができますか? (ASP.NET Web アプリケーションで Dropbox API を使用)。

4

5 に答える 5

2

Sharpbox はしばらく更新されていないようです。あなたはチェックアウトしたいかもしれません

https://github.com/dkarzon/DropNet

それはnugetにあります。packagemanagerコンソールでこれを使用してください:

インストール パッケージ DropNet

詳細については、このブログを参照してください: http://dkdevelopment.net/what-im-doing/dropnet/

于 2013-07-01T13:25:03.237 に答える
1

私は完璧な解決策を見つけました。SharpBox .NET ライブラリを使用しました...

私はそれで遊んで、フォルダーの読み取り、ファイルの取得、ダウンロード用のファイルコンテンツの読み取りなどを行うことができました!

于 2012-02-21T23:16:53.000 に答える
0

素敵なデモを示すサンプル (ASP MVC4 とSharpBox .NET を使用) を次に示します。

最初に、App_Data 内のファイルからアクセス トークンを読み込もうとします。そこにある場合は、トークンを使用してドロップボックスのアプリ フォルダーを読み取ります。

存在しない場合は、現在のセッションにリクエスト トークンがあるかどうかを確認します。利用可能な場合、ユーザーは自分のドロップボックスにアクセスする許可を Web アプリケーションに付与している可能性があるため、リクエスト トークンをアクセス トークンに変換してみてください。

リクエスト トークンがない場合は、トークンを作成してセッションに保存し、ユーザーをドロップボックスにリダイレクトして、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;
    }
}
于 2013-03-06T12:48:52.993 に答える
0

Dropbox との連携方法はわかりませんが、私のアプリケーションは www.DriveHQ.com と連携しており、完全に機能しています。DriveHQ はプライベート Web サイトを提供してくれます。これは素晴らしいことです。

于 2012-02-21T00:53:28.943 に答える
0

Spring.NET Social Dropbox を確認してください: http://www.springframework.net/social-dropbox/ ディストリビューションに完全な ASP.NET の例があります。

于 2012-02-21T22:25:23.930 に答える