我想明白了,尽管解决方案看起来有些尴尬。
基本上,如果有必要,您总是必须准备好创建另一个auth会话。你创建一个auth会话,看看它是否有效,如果不是,创建第二个真实的。您会测试该通过捕获两个事件:
boxClient.Auth.SessionAuthenticated += Auth_SessionAuthenticated;
boxClient.Auth.SessionInvalidated += Auth_SessionInvalidated;
对我来说,这似乎是愚蠢的 - 我跑我的应用程序次/天,所以我只想每次刷新我的令牌。所以我总是创建两个:
var config = new BoxConfig(CLIENT_ID, CLIENT_SECRET, new Uri(RedirectURI));
// Prior to this code snippet, I grabbed my starter access & refresh tokens from where I stored them in our db.
var auth = new OAuthSession(InitialToken, RefreshToken, 3600, "bearer");
var client = new BoxClient(config, auth);
/// Try to refresh the access token
var realAuth = await client.Auth.RefreshAccessTokenAsync(auth.AccessToken);
/// Create the client again
var realClient = new BoxClient(config, realAuth);
//going to just log/update tokens every time. This only runs 1x/day, so should be no harm.
LogNewTokens(realAuth.AccessToken, realAuth.RefreshToken);
然后我使用“realClient”作为剩余的Box请求。
回想起来,我可能会更快地解除代码,将这些请求直接发布到Box并解析返回的JSON。我希望有一个很好的包装对象,可以自动为我更新我的令牌,连接并使新的包容易获得。我认为他们可以在C#SDK上做得更好。
这就是你的编程技能踢在哪里..如果没有API没有扩展方法或附加的给我,这是看起来你会编写自己的逻辑或类来处理这样的事情..在我看来... – MethodMan
我问我是否缺少API的一部分 - 我需要监听的事件,更改的返回属性等。显然,我无法存储我的用户名和密码以传递给Box未受监控应用的登录网页。 – Quicksilver
如果该应用程序是一个控制台应用程序..你可以在App.Config文件中存储用户名和密码,并让该部分加密你试过 – MethodMan