将ASP.NET Web应用程序连接到Dropbox

时间:2012-02-21 00:42:41

标签: asp.net dropbox dropbox-api

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

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

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

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

有人可以对这个问题有所了解吗? (使用带有ASP.NET Web应用程序的Dropbox API)。

5 个答案:

答案 0 :(得分:2)

Sharpbox似乎暂时没有更新。您可能想要结帐

  

https://github.com/dkarzon/DropNet

它在nuget上,只需在packagemanager控制台中使用它:

  

Install-Package DropNet

在此博客上阅读更多相关信息: http://dkdevelopment.net/what-im-doing/dropnet/

答案 1 :(得分:1)

我找到了完美的解决方案。 我使用了SharpBox .NET库......

我玩过它,我能够读取文件夹,获取文件,阅读文件内容以供下载等等!

答案 2 :(得分:0)

我不知道如何使用Dropbox,但我的应用程序正在与www.DriveHQ.com合作,工作完美,DriveHQ为我提供了一个私人网站,这太棒了。

答案 3 :(得分:0)

检查Spring.NET Social Dropbox:http://www.springframework.net/social-dropbox/ 分发中有一个完整的ASP.NET示例。

答案 4 :(得分:0)

这是一个示例(使用ASP MVC4和SharpBox .NET),它显示了一个很好的演示。

首先,它尝试从App_Data中的文件加载访问令牌。如果它在那里,请使用令牌读取dropbox上的app文件夹。

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