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

