我正在开发一个网络应用程序,我想让我的用户能够连接个人 Dropbox 帐户。我将构建文件和文件夹浏览器,但我希望能够先访问它们。
我的应用程序有来自 Dropbox 的 ApiKey 和 ApiSecret。
我尝试使用 C# 框架,但我认为这些框架适用于桌面/winform/控制台/移动应用程序。
我能够获得 request_token,但无法获得 access_token。
有人可以说明这个问题吗?(使用 Dropbox API 和 ASP.NET Web 应用程序)。
我正在开发一个网络应用程序,我想让我的用户能够连接个人 Dropbox 帐户。我将构建文件和文件夹浏览器,但我希望能够先访问它们。
我的应用程序有来自 Dropbox 的 ApiKey 和 ApiSecret。
我尝试使用 C# 框架,但我认为这些框架适用于桌面/winform/控制台/移动应用程序。
我能够获得 request_token,但无法获得 access_token。
有人可以说明这个问题吗?(使用 Dropbox API 和 ASP.NET Web 应用程序)。
看来Sharpbox有一段时间没有更新了。您可能想结帐
它在 nuget 上,只需在 packagemanager 控制台中使用它:
安装包 DropNet
在这个博客上阅读更多关于它的信息:http: //dkdevelopment.net/what-im-doing/dropnet/
我找到了完美的解决方案。我使用了 SharpBox .NET 库...
我玩过它,我能够读取文件夹、获取文件、读取文件内容以供下载等等!
我不确定如何使用 Dropbox,但我的应用程序正在使用 www.DriveHQ.com,完美运行,DriveHQ 为我提供了一个私人网站,这太棒了。
检查 Spring.NET Social Dropbox:http ://www.springframework.net/social-dropbox/ 分发中有一个完整的 ASP.NET 示例。
这是一个示例(使用 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;
}
}