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

Xamarin.Forms iOS调用API返回网络连接已离线错误问题求助

错误原因

Error Domain=NSURLErrorDomain Code=-1009 "The Internet connection appears to be offline." UserInfo={…

该错误是iOS系统层面拦截网络请求抛出的异常,和你提供的请求代码逻辑无关,常见诱因如下:

  • iOS ATS(应用传输安全)策略拦截未加密的HTTP请求:你本地部署的API如果走HTTP协议,iOS默认禁止普通应用发起HTTP请求,Safari作为系统内置应用不在此限制范围内,所以会出现Safari可访问、应用请求失败的情况。
  • iOS项目缺少必要的网络权限声明:Info.plist未配置网络访问、本地网络访问的相关权限,请求被系统直接拦截。
  • Xamarin iOS项目的HttpClient实现配置错误:使用了过时的托管HttpClient实现,未适配iOS的网络要求。
  • 请求地址填写错误:应用内写的API地址和Safari访问的地址不一致,比如IP、端口拼写错误。
解决步骤
  • 1 配置ATS例外规则:
    打开iOS项目的Info.plist文件,添加如下配置,允许应用访问你本地的HTTP服务:
<key>NSAppTransportSecurity</key>
<dict>
  <!-- 测试阶段可临时设为true允许所有HTTP请求,正式发布时建议关闭只加必要的例外域名 -->
  <key>NSAllowsArbitraryLoads</key>
  <false/>
  <key>NSExceptionDomains</key>
  <dict>
    <!-- 替换为你本地Linux服务器的IP地址,比如192.168.1.100 -->
    <key>192.168.1.100</key>
    <dict>
      <key>NSIncludesSubdomains</key>
      <true/>
      <key>NSExceptionAllowsInsecureHTTPLoads</key>
      <true/>
    </dict>
  </dict>
</dict>
  • 2 调整HttpClient实现配置:
    在Visual Studio中右键iOS项目 -> 「属性」 -> 「iOS生成」,找到「HttpClient实现」选项,选择NSUrlSession,SSL/TLS实现也同步选择NSUrlSession,保存后重新编译部署应用。
  • 3 检查设备权限:
    在你的iPhone设置中找到对应应用,确认「无线数据」权限已开启,如果是iOS14及以上系统,还要确认「本地网络」权限已开启。
  • 4 验证请求地址:
    在你的PostResponse方法中添加日志打印weburl参数,确认和Safari中访问的地址完全一致,无IP、端口、路径拼写错误。可以先尝试请求公网可访问的HTTPS接口验证应用本身的网络请求能力是否正常。
  • 5 优化异常捕获逻辑方便排查:
    你当前的异常处理只抛出了基础错误信息,建议调整为打印完整异常堆栈,方便定位深层问题:
catch (Exception e)
{
    // 可在此处添加日志输出e.ToString()
    throw new Exception($"请求失败:{e.ToString()}", e);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:06:00