0

.Net で dropBox ダウンローダーを作成していますが、コードを実行しようとするたびに未処理の例外が発生します。ドロップボックス アプリは既に認証済みです。

コードは次のとおりです。

dropClient = new DropNetClient("xxxxxxxxxxxxx", "yyyyyyyyyyyyyy");
//Btw in my code I have the actual app key and secret
dropClient.GetToken();
var accessToken = dropClient.GetAccessToken();
dropClient.UserLogin = new DropNet.Models.UserLogin { Token = "myemail@gmail.com", Secret = "myPass" };
4

1 に答える 1

1

ここでの問題は、実際にはクライアントの資格情報を取得していないことです

これが私のドロップネット接続マネージャークラスです

public class ConnectionManager
{
    private DropNetClient _client;


    public string GetConnectUrl(DropNetClient client, string callbackurl)
    {
        _client = client;

        var url = _client.BuildAuthorizeUrl(callbackurl);

        return url;
    }


    public DropNetClient Connect()
    {
        _client = new DropNetClient("token", "secret");

        _client.GetToken();

        return _client;
    }


    public Dictionary<string, string> GetAccessToken(string tok, string secret)
    {

        _client = new DropNetClient("token", "secret", tok, secret);
        var token = _client.GetAccessToken();
        var dic = new Dictionary<string, string> {{"token", token.Token}, {"secret", token.Secret}};
        return dic;
    }

    public DropNetClient Connect(TokenAndSecretModel model)
    {

        _client = new DropNetClient("token", "secret", model.Token, model.Secret);

        var info = _client.AccountInfo();

        return _client;
    }

}

最初に Connect() を呼び出します。次に GetConnectUrl(...) コールバック URL は、呼び出しがいつ完了したかを知るために必要です。返された URL にリダイレクトし、コールバック URL が応答を受け取るまで待ちます。トークンとシークレットが _client.UserLogin.Token と _client.UserLogin.Secret からのものである GetAccessToken(token, secret) を呼び出すと、GetAccessToken は保存する必要があるトークンとシークレットを返します。

これを完了するために、これが私のコントローラーです

public class DropBoxController : Controller
{

    private readonly ICommandChannel _commandChannel;
    private readonly IQueryChannel _queryChannel;
    private readonly UserModel _user;

    public DropBoxController(ICommandChannel commandChannel, IQueryChannel queryChannel, UserModel user)
    {
        _commandChannel = commandChannel;
        _queryChannel = queryChannel;
        _user = user;
    }
    public ActionResult Index()
    {
        var con = new ConnectionManager();
        var dropclient = con.Connect();
        var callbackurl = Request.Url.Scheme + "://" + Request.Url.Authority + "/DropBox/Callback";
        var url = con.GetConnectUrl(dropclient, callbackurl);
        _commandChannel.Execute(new SaveDropBoxTempSecurityCommand { AuthToken = dropclient.UserLogin.Token, Token = dropclient.UserLogin.Token, Secret = dropclient.UserLogin.Secret });

        return Redirect(url);
        //return View(new UrlModel {Url = url});

    }

    [HttpGet]
    public ActionResult Callback(string oauth_token)
    {
        TokenAndSecretModel model = _queryChannel.Execute(new GetDropBoxTempTokenQuery{Token = oauth_token});
        var con = new ConnectionManager();
        var login = con.GetAccessToken(model.Token, model.Secret);
        _commandChannel.Execute(new SaveDropBoxLoginCommand{AuthToken = oauth_token, Login = login});
        return View();
    }


}
public class UrlModel
{
    public string Url { get; set; }
}

一時的な認証情報をデータベースに保持していることがわかります。必要に応じて、それらをセッションに保存することもできます。これが役立つことを願っています。

于 2015-07-20T22:20:24.747 に答える