Expo应用调用Business Central API遇网络请求失败问题求助
解决Expo调用Business Central API出现Network request failed的问题
排查方向与修复步骤
1. 对齐请求配置与Postman的差异
- 逐行对比Postman和JS代码的请求头:确保
Authorization(Bearer token拼接是否正确)、Accept、Content-Type等必要头信息完全一致,不要遗漏任何Postman里配置的自定义头。 - 核对请求URL:必须使用完整绝对路径,检查是否存在拼写错误、特殊字符未编码的情况。
- 确认请求方法:比如Postman用GET,JS代码里不能写成POST。
2. 处理Expo的网络权限与安全限制
- Android端:检查
app.json是否配置了必要网络权限,没有的话添加:{ "expo": { "android": { "permissions": ["INTERNET", "ACCESS_NETWORK_STATE"] } } } - iOS端:如果API用的是HTTP而非HTTPS,Expo默认会拦截,可临时在
app.json添加配置(上线前务必切换到HTTPS):{ "expo": { "ios": { "infoPlist": { "NSAppTransportSecurity": { "NSAllowsArbitraryLoads": true } } } } }
3. 解决证书验证问题
如果Business Central用的是自签名证书,Expo会默认拒绝连接:
- Android:将证书文件放到
android/app/src/main/res/raw目录,然后通过network_security_config.xml配置信任该证书。 - iOS:把证书添加到项目
Info.plist的NSExceptionDomains中,指定信任目标域名。
4. 捕获详细错误日志
修改JS代码,补充完整的错误捕获逻辑,打印更细节的错误信息,方便定位问题:
try { const response = await fetch('你的Business Central API完整URL', { method: 'GET', headers: { 'Authorization': 'Bearer ' + 你的授权Token, 'Accept': 'application/json', 'Content-Type': 'application/json' } }); const data = await response.json(); console.log('返回数据:', data); } catch (error) { console.error('请求错误详情:', error); console.error('错误代码:', error.code); console.error('错误栈:', error.stack); }
通过日志判断是DNS解析失败、连接超时还是证书校验问题。
5. 检查CORS配置(仅Web预览场景)
如果是在Expo Web端测试,Postman不受CORS限制但浏览器会受影响,需要在Business Central的API服务器上配置CORS规则,允许Expo应用的域名发起请求,同时放行对应的请求方法和头信息。
内容的提问来源于stack exchange,提问作者Jógvan Reinert Samuelsen
相关产品推荐
相关产品推荐

