ここでは、デモを見せるサンプル(ASP MVC4とSharpBox .NETを使用しています)があります。
まず、App_Dataのファイルからアクセストークンをロードしようとします。存在する場合は、トークンを使用してdropboxのappフォルダを読み込みます。
現在のセッションにリクエストトークンがあるかどうかを確認します。利用可能な場合は、ユーザーが自分の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;
}
}
ありがとう、しかし私はSharpBoxライブラリを代わりに使用しました – udidu