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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:30:02