React Native调用dotnet core REST API HTTPS请求安卓模拟器报错问题
React Native安卓端HTTPS请求.NET Core API报错问题排查与解决
第一步:定位核心问题原因
- 该问题90%以上的场景是证书信任规则差异导致:iOS模拟器会共享宿主机系统的证书信任列表,本地开发用的dotnet自签证书只要在宿主机受信任,iOS侧就能正常请求;但安卓系统的证书信任列表和宿主机完全独立,默认不信任本地自签证书,会直接拦截HTTPS请求。
- 快速验证方法:打开安卓模拟器自带的系统浏览器,输入你的API地址(注意安卓模拟器访问宿主机本地服务不能用
localhost/127.0.0.1,必须用固定映射IP10.0.2.2,例如https://10.0.2.2:5001/health),如果浏览器提示证书不安全,即可确认是证书信任问题。
第二步:排查安卓应用网络配置
- 安卓9(API Level 28)及以上系统默认对网络请求做了严格限制,需要确认你项目中
android/app/src/main/res/xml/network_security_config.xml的配置是否符合要求:
以下配置仅适用于开发环境,生产环境必须删除开发专属的信任规则,避免安全风险
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">10.0.2.2</domain> <domain includeSubdomains="true">你的服务端正式域名</domain> <trust-anchors> <certificates src="system" /> <!-- 开发环境临时信任用户手动安装的证书,生产环境删除该行 --> <certificates src="user" /> </trust-anchors> </domain-config> </network-security-config>
- 同时确认
android/app/src/main/AndroidManifest.xml的application标签已添加属性:android:networkSecurityConfig="@xml/network_security_config"
对应解决方案
开发环境临时方案
- 方法1:将.NET Core的自签证书导入安卓模拟器信任列表
- 宿主机执行命令导出证书:
dotnet dev-certs https -ep ./dev-cert.pfx -p 自定义密码 - 转换为安卓可识别的crt格式:
openssl pkcs12 -in dev-cert.pfx -clcerts -nokeys -out dev-cert.crt - 将crt文件拖入安卓模拟器窗口,按照系统提示完成证书安装即可
- 宿主机执行命令导出证书:
- 方法2:临时跳过证书校验(严禁在生产环境使用),以axios为例:
// 仅开发环境生效 if(process.env.NODE_ENV === 'development') { const https = require('https'); axios.defaults.httpsAgent = new https.Agent({ rejectUnauthorized: false }); }
生产环境标准方案
- 服务端必须使用公共CA机构颁发的正规HTTPS证书,禁止使用自签证书
- 确认请求地址的域名/IP和证书绑定的域名/IP完全一致,不存在域名不匹配问题
- 确认服务端配置的证书链完整,没有缺少中间证书
注意:安卓模拟器访问宿主机本地服务必须用10.0.2.2替代localhost,否则也会触发网络错误
内容的提问来源于stack exchange,提问作者kubra
相关产品推荐
相关产品推荐

