Подключение веб-приложения ASP.NET к Dropbox - PullRequest
2 голосов
/ 21 февраля 2012

Я работаю над веб-приложением и хочу, чтобы мои пользователи могли подключить личную учетную запись Dropbox.Я создам браузер файлов и папок, но сначала хочу получить к ним доступ.

У меня есть ApiKey и ApiSecret из Dropbox для моего приложения.

Я пытался использовать фреймворки C #но я думаю, что это для настольных / winform / console / мобильных приложений.

Мне удалось получить request_token, но я не могу получить access_token.

Может кто-нибудь, пожалуйста, пролить свет на эту проблему?(работа с Dropbox API с веб-приложением ASP.NET).

Ответы [ 5 ]

2 голосов
/ 01 июля 2013

Кажется, что Sharpbox давно не обновлялся.Возможно, вы захотите оформить заказ

https://github.com/dkarzon/DropNet

на nuget, просто используйте его в консоли менеджера пакетов:

УстановитьПакет DropNet

подробнее об этом в этом блоге: http://dkdevelopment.net/what-im-doing/dropnet/

1 голос
/ 22 февраля 2012

Я нашел идеальное решение. Я использовал библиотеку SharpBox .NET ...

Я играл с ним, и я смог читать папки, получать файлы, читать содержимое файлов для загрузки и многое другое!

0 голосов
/ 06 марта 2013

Вот пример (с использованием ASP MVC4 и SharpBox .NET), который показывает хорошую демонстрацию.

Сначала он пытается загрузить токен доступа из файла в App_Data. Если он есть, используйте токен для чтения папки приложения в Dropbox.

Если его там нет, посмотрите, есть ли токен запроса в текущем сеансе. Если он доступен, пользователь мог предоставить веб-приложению разрешение на доступ к своему раскрывающемуся списку, поэтому попытайтесь превратить токен запроса в токен доступа.

Если токена запроса нет, создайте его, сохраните в сеансе и перенаправьте пользователя в Dropbox, чтобы ему было предложено предоставить веб-приложению доступ к своей папке.

Примечание: код является демонстрационным. Чтобы превратить его в многопользовательский и реальный сценарий, вам нужно будет сохранить файл токена доступа для каждого пользователя, и вы должны кэшировать токен доступа в кеше сеанса, чтобы предотвратить лишнее чтение файла токена доступа.

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;
    }
}
0 голосов
/ 22 февраля 2012

Проверьте Spring.NET Social Dropbox: http://www.springframework.net/social-dropbox/ В дистрибутиве приведен полный пример ASP.NET.

0 голосов
/ 21 февраля 2012

Я не уверен, как работать с Dropbox, но мое приложение работает с www.DriveHQ.com, работает отлично, DriveHQ предоставляет мне частный сайт, это потрясающе.

...