素敵なデモを示すサンプル (ASP MVC4 とSharpBox .NET を使用) を次に示します。
最初に、App_Data 内のファイルからアクセス トークンを読み込もうとします。そこにある場合は、トークンを使用してドロップボックスのアプリ フォルダーを読み取ります。
存在しない場合は、現在のセッションにリクエスト トークンがあるかどうかを確認します。利用可能な場合、ユーザーは自分のドロップボックスにアクセスする許可を 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;
}
}