如何在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
相关产品推荐
相关产品推荐

