下面是一個示例(使用ASP MVC4和SharpBox .NET),它演示了一個很好的演示。
首先它嘗試從App_Data中的文件加載訪問令牌。如果它在那裏,使用令牌讀取保存箱中的應用程序文件夾。
如果不在那裏,請查看當前會話中是否有請求令牌。如果可用,用戶可能已授予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;
}
}
謝謝,但我用SharpBox庫代替 – udidu 2012-02-21 23:18:15