Xamarin iOS调用RestAPI出现System.NullReferenceException异常求助
问题根因定位及解决方案
报错栈指向DataService构造函数第23行,也就是DependencyService.Get<IHttpClientHandlerService>().GetInsecureHandler()这行,核心问题集中在iOS平台专属配置和依赖服务实现缺失,按优先级排查解决:
1. 补充iOS平台的IHttpClientHandlerService实现与注册
你目前只在Android平台实现了IHttpClientHandlerService接口的不安全处理器逻辑,iOS平台未实现或未注册依赖服务,导致调用DependencyService.Get时返回空引用抛出异常。
在iOS项目中新增实现类:
using App2.iOS.Services; using App2.Services; // 替换为你IHttpClientHandlerService所在的命名空间 using Foundation; using System.Net.Http; using Xamarin.Forms; [assembly: Dependency(typeof(HttpClientHandlerService))] namespace App2.iOS.Services { public class HttpClientHandlerService : IHttpClientHandlerService { public HttpClientHandler GetInsecureHandler() { var handler = new HttpClientHandler(); // 绕过证书校验,仅调试模式使用 handler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true; return handler; } } }
2. 校验Info.plist配置正确性
你已添加NSAllowArbitraryLoads,需确认配置层级和遗漏项:
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowArbitraryLoads</key> <true/> <!-- iOS14+访问本地局域网需加以下权限 --> <key>NSLocalNetworkUsageDescription</key> <string>需要访问本地网络获取服务数据</string> </dict>
3. 调整Xamarin iOS HttpClient实现配置
跨版本升级Xamarin后,iOS默认HttpClient实现可能变更为NSUrlSession,导致自定义Handler不生效:
- 右键iOS项目 -> 属性 -> iOS生成
- HttpClient实现选择
Managed - SSL/TLS实现选择
允许任意证书(仅调试)
4. 可选:后续切换HTTPS的优化建议
当前你调用的是HTTP服务,证书问题不是当前故障的原因,后续如需上HTTPS可申请免费域名证书,不需要修改核心请求逻辑。
内容的提问来源于stack exchange,提问作者ABpositive
相关产品推荐
相关产品推荐

