函数失败后我是不是应该重新调用 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# 中刷新我的访问令牌?的主要内容,如果未能解决你的问题,请参考以下文章

页面加载后我的第一个 api 请求总是失败

编译失败。 webpack 不是函数

在 API 调用期间禁用按钮

创建函数后我应该 COMMIT 吗?

应用加载失败(loadlibrary失败 ,)应该怎么解决

调用Win32 API 之CreateCursor函数失败