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

网络断开时外部API调用失败的异常处理求助

网络断开时API调用异常的修复方案

现有代码的问题

  • 使用了过时的WebException:在.NET Core/.NET 5+环境下,HttpClient相关方法抛出的是HttpRequestException(网络中断、请求失败时触发),部分场景还会抛出TaskCanceledException(比如超时或网络断开导致请求取消),WebException不再适用。
  • catch块无处理逻辑:空catch会掩盖异常,但后续代码直接访问rootdata.d.Results,此时rootdata未被赋值,会触发空引用异常,这就是浏览器控制台报错的根源。
  • 未处理请求成功但返回数据为空的情况:即使请求成功,rootdata或rootdata.d也可能为空,直接调用ToList()会再次引发异常。

修复后的代码

private async Task<IEnumerable<Result>> searchresult(string searchText)
{
    try
    {
        rootdata = await HttpClientJsonExtensions.GetFromJsonAsync<Rootdata>(httpClient, $"https://expressentry...");
        
        // 检查返回数据是否为空,避免空引用
        if (rootdata?.d?.Results == null)
        {
            return Enumerable.Empty<Result>();
        }
        
        addresslist = rootdata.d.Results.ToList();
        return addresslist;
    }
    // 捕获网络相关异常(网络断开、请求失败等)
    catch (HttpRequestException ex)
    {
        // 可在此记录日志,或返回空列表/友好提示
        return Enumerable.Empty<Result>();
    }
    // 捕获请求超时或被取消的异常(部分网络断开场景会触发)
    catch (TaskCanceledException ex)
    {
        // 可在此记录日志
        return Enumerable.Empty<Result>();
    }
    // 捕获JSON序列化失败的异常(可选)
    catch (JsonException ex)
    {
        // 可在此记录日志
        return Enumerable.Empty<Result>();
    }
}

关键说明

  • 异常类型替换:用HttpRequestException和TaskCanceledException覆盖网络相关的失败场景,确保能捕获网络断开时的错误。
  • 空值检查:在访问rootdata.d.Results前增加空值判断,避免空引用异常。
  • 异常处理逻辑:catch块中不再空处理,而是返回空列表(或根据业务需求抛出友好异常),保证方法能正常返回,不会导致前端未处理错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 14:25:22