我正在开发一个网络应用程序,我想让我的用户能够连接个人Dropbox帐户。 我将构建文件和文件夹浏览器,但我希望能够首先访问它们。
我有一个来自Dropbox的ApiKey和ApiSecret用于我的应用程序。
我尝试使用C#框架,但我认为它们适用于桌面/ winform /控制台/移动应用程序。
我能够获得request_token但我无法获得access_token。
有人可以对这个问题有所了解吗? (使用带有ASP.NET Web应用程序的Dropbox API)。
答案 0 :(得分:2)
Sharpbox似乎暂时没有更新。您可能想要结帐
它在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;
}
}