Android模拟器调用ASP.NET Core API报TrustFailure认证错误如何解决?
问题根因说明
你遇到的CERTIFICATE_VERIFY_FAILED报错和项目选择的「无身份验证」模式没有关联,属于HTTPS证书信任问题:IIS Express默认会为本地站点生成自签名SSL证书,该证书仅在你的开发主机系统中被信任,安卓模拟器的系统信任列表中没有该证书,因此发起HTTPS请求时校验失败,请求还没到后端接口逻辑就被终端拦截了。
解决方案
方案1:开发环境临时跳过证书校验(仅适用于本地调试,禁止生产环境使用)
在Xamarin客户端的请求代码前添加全局证书校验绕过逻辑,跳过SSL证书校验步骤:
// 注意:仅本地开发调试可用,生产环境使用会存在严重安全风险 System.Net.ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true; WebClient web = new WebClient(); try { var data = web.DownloadData("https://192.168.1.233:44346/Item"); } catch(Exception e) { throw; }
方案2:导入自签名证书到安卓模拟器(更规范的开发调试方案)
将开发机的IIS Express自签名证书导入到安卓模拟器的系统信任列表,无需修改业务代码:
- 打开Windows证书管理器:按下Win+R输入
certmgr.msc回车启动 - 依次进入「受信任的根证书颁发机构」→「证书」,找到颁发者和名称均为
localhost的IIS Express生成证书 - 右键点击证书选择「所有任务」→「导出」,导出格式选择「DER编码二进制X.509(.CER)」,保存到本地
- 将导出的CER文件拖入安卓模拟器,按照提示选择「用于VPN和应用」完成安装,之后请求即可正常通过证书校验
方案3:本地调试使用HTTP协议
如果不需要HTTPS,可直接切换为HTTP请求,规避证书问题:
- 修改ASP.NET Core项目配置:打开项目根目录下的
launchSettings.json,找到IIS Express配置节点,记录对应的HTTP端口(或把sslPort设为0关闭HTTPS) - 安卓9及以上版本默认禁止明文HTTP请求,需在安卓项目中添加网络安全配置:
- 在
Resources/xml目录下新建network_security_config.xml,配置允许对应开发IP的明文请求:<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">192.168.1.233</domain> </domain-config> </network-security-config> - 在
AndroidManifest.xml的Application节点添加属性android:networkSecurityConfig="@xml/network_security_config"
- 在
- 客户端请求地址改为HTTP协议对应端口即可。
补充说明:命令行启动超时问题
你提到的用命令行启动项目超时,大概率是Kestrel默认仅绑定localhost,没有监听局域网IP,可在启动时指定监听地址解决:
dotnet run --urls http://0.0.0.0:5000;https://0.0.0.0:5001
启动后模拟器即可通过对应IP端口访问接口。
内容的提问来源于stack exchange,提问作者Majd Odeh
相关产品推荐
相关产品推荐

