Я сделал класс, который уже работает с Dropbox API, загружая файлы, загружая их, удаляя и т. Д. Он работает очень хорошо, так как я просто использовал свой токен доступа, но мне нужно зарегистрировать других пользователей, и появилась одна, но «большая» проблема: извлечение токена доступа.Grabbing Accessken token на Windows Form с использованием Dropbox API
1.- Перенаправление URI? Я начинаю сомневаться, зачем мне это нужно. Я, наконец, использовал этот URI (https://www.dropbox.com/1/oauth2/redirect_receiver), потому что "The redirect URI you use doesn't really matter" Конечно, я включил этот вариант в свою конфигурацию приложения на Dropbox.
2.- Я достигаю учетную запись пользователя (я могу видеть счетчик пользователя увеличивается, и я вижу, что приложение имеет доступ к учетной записи пользователя.
3.- У меня есть точки останова на мой код, чтобы инспектировать переменные для того, чтобы применить DropboxOAuth2Helper.ParseTokenFragment но у меня нет никакого успеха на есть
Это мой код, но на если раньше попытка поймать, где он застревает:.
string AccessToken;
const string AppKey = "theOneAtmyAppConfigOnDropbox";
const string redirectUrl = "https://www.dropbox.com/1/oauth2/redirect_receiver";
string oauthUrl =
[email protected]"https://www.dropbox.com/1/oauth2/authorize?response_type=token&redirect_uri={redirectUrl}&client_id={AppKey}";
private string oauth2State;
private bool Result;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Start(AppKey, webBrowser1);
webBrowser1.Navigating += Browser_Navigating;
}
private void Start(string appKey, WebBrowser w)
{
this.oauth2State = Guid.NewGuid().ToString("N");
Uri authorizeUri = DropboxOAuth2Helper.GetAuthorizeUri(OauthResponseType.Token, appKey, redirectUrl, state: oauth2State);
w.Navigate(authorizeUri);
}
private void Browser_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
if (!e.Url.ToString().StartsWith(redirectUrl, StringComparison.InvariantCultureIgnoreCase))
{
// we need to ignore all navigation that isn't to the redirect uri.
return;
}
try
{
OAuth2Response result = DropboxOAuth2Helper.ParseTokenFragment(e.Url);
if (result.State != this.oauth2State)
{
// The state in the response doesn't match the state in the request.
return;
}
this.AccessToken = result.AccessToken;
this.Result = true;
}
catch (ArgumentException)
{
// There was an error in the URI passed to ParseTokenFragment
}
finally
{
e.Cancel = true;
this.Close();
}
}
Я был борясь против этого часами, и я начинаю видеть, что сейчас немного облачно.
This - это учебник, который я использовал, но я не продвигаюсь вперед. Я бы очень признателен за любую помощь!
EDIT: Я, наконец, сделал несколько шагов вперед. Я изменил строку, которая содержит
Uri authorizeUri2 = DropboxOAuth2Helper.GetAuthorizeUri(appKey);
Теперь я показываю сгенерированный токен доступа на веб-клиенте! Плохая часть при попытке получить ее (она попадает внутрь if), и она генерируется каждый раз, когда я прошу пользователя получить разрешение, поэтому она перезаписывается.
EDIT 2: Я заметил, что токен, который я генерировал в браузере, как-то искажен. Я пытаюсь вручную изменить его hardcored, когда я отладки и я получаю исключение, когда AuthException при создании объекта DropboxClient :(Что за черт!
[Перекрестная ссылка для ссылки: https: //www.dropboxforum .com/t5/API-поддержка/Облицовка-проблема-получение-доступ-токен-из-пользователь-на-Windows/mp/205702 # M9950] – Greg