函数失败后我是不是应该重新调用 API 函数并在 c# 中刷新我的访问令牌?
Posted
技术标签:
【中文标题】函数失败后我是不是应该重新调用 API 函数并在 c# 中刷新我的访问令牌?【英文标题】:Should I re call an API function after the function fails and I refresh my access token in c#?函数失败后我是否应该重新调用 API 函数并在 c# 中刷新我的访问令牌? 【发布时间】:2022-01-18 20:32:19 【问题描述】:对不起,如果标题有点混乱,我有一个在我的应用启动时连接到 API 的函数:
private async void connectFunction()
try
result = await myAPICall();
// do a lot of stuff with the data here
catch (System.ArgumentNullException) // this is only throne when my api access token has expired
RefreshTokens();
connectFunction(); //this is what I'm concerned about
现在这一切都很好,但我不知道下一步该做什么,我的访问令牌已更新,现在我需要再次调用相同的函数,但我担心如果我在 catch 中调用它阻止某些事情可能会出错,我的应用程序陷入循环,有什么建议吗?
【问题讨论】:
您应该尝试有一种方法知道“您的令牌即将到期”。通常 JWT 令牌有一个过期时间戳,您可以在 错误发生之前刷新令牌。 如果我的应用程序关闭,我将如何保持计时器运行? 刷新令牌有一个到期时间戳(一个具体的日期和时间),而不是一个时间范围。您可以将令牌存储在某个地方(危险!) - 或者在设备启动时始终尝试获取一个新令牌,至少一次。 【参考方案1】:如果您只想重试一次,则无需循环(或递归):
private async void connectFunction()
MyResultType result;
try
result = await myAPICall();
catch (System.ArgumentNullException) // this is only throne when my api access token has expired
RefreshTokens();
// If this fails, the exception is not caught here, which
// is a good thing. We know that the token can't be the cause
// because we just refreshed it, so we *want* this error to
// bubble up to our generic UI exception handler.
result = await myAPICall();
// do a lot of stuff with the data here
【讨论】:
以上是关于函数失败后我是不是应该重新调用 API 函数并在 c# 中刷新我的访问令牌?的主要内容,如果未能解决你的问题,请参考以下文章