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

如何在C#中实现API请求失败时跳过继续执行(类似On Error GoTo Next)

实现跳过失败API调用继续遍历的解决方案

没问题,要实现类似On Error GoTo Next的效果,让程序在某个ID的API调用失败时自动跳过、继续处理下一个ID,只需要用try-catch块包裹你的API核心逻辑就行,具体做法如下:

核心思路

把每个ID对应的API请求、结果解析等可能抛出异常的代码放在try块中,在catch块里捕获异常(建议针对性捕获具体异常类型),并且不中断循环——这样当某个ID处理失败时,程序会进入catch块做日志记录(这步很重要!),然后自动回到foreach循环处理下一个ID。

修改后的代码示例

foreach (var item in ID)
{
    try
    {
        List<string> resultList = new List<string>();
        
        // 拼接API请求URL(注意这里要确保Session和配置项不为空,否则也会抛异常)
        string baseUrl = HttpContext.Current.Session["url"].ToString();
        string propertyPath = ConfigurationManager.AppSettings["propertyURL"].ToString();
        string objectId = HttpContext.Current.Session["ObjectID"].ToString();
        string url = string.Format($"{baseUrl}{propertyPath}", objectId, item);
        
        // 这里替换成你实际的API调用逻辑,比如用HttpClient请求
        using (var httpClient = new HttpClient())
        {
            // 发送GET请求,确保HTTP错误状态码会抛出异常
            HttpResponseMessage response = await httpClient.GetAsync(url);
            response.EnsureSuccessStatusCode();
            
            // 读取并解析响应内容到resultList
            string responseContent = await response.Content.ReadAsStringAsync();
            // 示例解析逻辑(根据你的实际API返回调整)
            resultList = JsonConvert.DeserializeObject<List<string>>(responseContent);
        }
        
        // API调用成功,处理结果
        HandleSuccessResult(resultList);
    }
    catch (HttpRequestException httpEx)
    {
        // 捕获HTTP请求相关的异常,比如网络错误、4xx/5xx状态码
        // 一定要记录日志,方便后续排查问题
        // Logger.Error($"处理ID {item} 时API请求失败: {httpEx.Message}", httpEx);
    }
    catch (FormatException formatEx)
    {
        // 捕获URL拼接或JSON解析时的格式异常
        // Logger.Error($"处理ID {item} 时格式错误: {formatEx.Message}", formatEx);
    }
    catch (Exception ex)
    {
        // 兜底捕获其他未预料的异常
        // Logger.Error($"处理ID {item} 时发生未知错误: {ex.Message}", ex);
    }
    
    // 不管有没有异常,都会自动进入下一次循环,处理下一个ID
}

关键注意事项

  • 不要捕获通用Exception后什么都不做:至少要记录异常日志,不然出现问题你根本不知道哪个ID失败了、失败原因是什么
  • 优先捕获具体异常类型:比如HttpRequestException(网络/HTTP错误)、JsonSerializationException(解析错误)等,这样能避免误捕获到其他非业务相关的异常(比如空引用)
  • 确保循环外的变量不会被异常影响:如果有在循环外定义的变量,要注意在每次循环里初始化或者重置,避免上次失败的残留数据干扰下一次处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:14:49