You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#调用第三方库方法时如何捕获其内部抛出的ApiKey无效异常

问题解决方案

核心原因

你调用的GetSummonerByNameAsync是异步方法,代码中没有使用await关键字等待异步逻辑执行完成,CheckAPIKEY方法会在异步请求还没返回结果时就直接返回true,异步逻辑抛出的异常脱离了当前try/catch的上下文范围,自然无法被捕获。你之前推测的「GetAppels内部try块优先级更高」是错误的:方法内部的try/finally不会阻断异常向上抛出,finally仅会在异常抛出前执行资源释放逻辑,执行完成后异常会正常向上传递。

修复代码

1. 修改CheckAPIKEY方法

将方法改为异步返回Task<bool>,添加await等待异步请求执行完成:

private async Task<bool> CheckAPIKEY(string key)
{
    try
    {
        riotApi = RiotApi.GetDevelopmentInstance(key);
        // 等待异步方法执行完成,异常才会被当前try/catch捕获
        await riotApi.Summoner.GetSummonerByNameAsync(
            region: RiotSharp.Misc.Region.Euw, 
            summonerName: summonerName
        );
        return true;
    }
    catch (RiotSharpException) 
    { 
        return false; 
    }
    // 可选:添加通用异常捕获,避免网络错误等其他异常未被捕获
    catch (Exception)
    {
        return false;
    }
}

2. 修改Button_Click调用逻辑

按钮点击事件改为异步方法,添加await等待校验结果返回:

private async void Button_Click(object sender, RoutedEventArgs e)
{
    if (gameIsRunning)
    {
        MessageBox.Show("程序已在运行中!");
        return;
    }
    if (summonerName == null)
    {
        MessageBox.Show("无法获取召唤师名称信息,请确认是否已打开英雄联盟客户端?");
        return;
    }
    KEY = Key.Text;
    bool keyIsValid = await CheckAPIKEY(KEY);
    if(!keyIsValid)
    {
        MessageBox.Show("你的Riot API密钥无效。");
    }
}

内容的提问来源于stack exchange,提问作者Sharki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 16:45:04