2

我正在开发一个网络应用程序,我想让我的用户能够连接个人 Dropbox 帐户。我将构建文件和文件夹浏览器,但我希望能够先访问它们。

我的应用程序有来自 Dropbox 的 ApiKey 和 ApiSecret。

我尝试使用 C# 框架,但我认为这些框架适用于桌面/winform/控制台/移动应用程序。

我能够获得 request_token,但无法获得 access_token。

有人可以说明这个问题吗?(使用 Dropbox API 和 ASP.NET Web 应用程序)。

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

我不确定如何使用 Dropbox,但我的应用程序正在使用 www.DriveHQ.com,完美运行,DriveHQ 为我提供了一个私人网站,这太棒了。

于 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 回答
0

这是一个示例(使用 ASP MVC4 和SharpBox .NET),展示了一个不错的演示。

首先,它尝试从 App_Data 中的文件加载访问令牌。如果存在,请使用令牌读取 Dropbox 上的应用程序文件夹。

如果不存在,请查看当前会话中是否存在请求令牌。如果可用,则用户可能已授予 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 回答