从Expo项目调用ASP.NET Core Web API遇网络错误,求解决方案
解决Expo调用ASP.NET Core API的Network Error问题
以下是针对你遇到问题的具体排查和解决步骤:
1. 修正API访问地址
localhost仅在电脑本地有效,模拟器/真机无法直接通过它访问电脑上的后端:
- Android模拟器:替换
localhost为10.0.2.2(Android模拟器默认映射电脑本地回环的地址),示例URL:https://10.0.2.2:5001/api/NguoiDung - iOS模拟器:可以直接使用
localhost,但如果是HTTPS连接需要处理证书问题 - 真机设备:使用电脑的局域网IP地址(比如
192.168.1.105,可通过ipconfig/ifconfig查询),示例URL:https://192.168.1.105:5001/api/NguoiDung
2. 处理HTTPS证书信任问题
ASP.NET Core开发环境的自签名证书不会被移动设备信任,这是常见的网络错误原因:
- 临时改用HTTP(开发环境):
打开后端项目的Properties/launchSettings.json,将applicationUrl改为HTTP地址(比如http://localhost:5000),同时更新Expo中的API URL为HTTP版本。 - 信任开发证书:
在电脑终端执行命令安装并信任证书:
真机设备需要手动安装证书(iOS需在「设置-通用-VPN与设备管理」中信任证书)。# Windows dotnet dev-certs https --trust # macOS sudo dotnet dev-certs https --trust
3. 补全CORS中间件配置
你仅添加了CORS策略,但还需要在管道中启用它:
在Program.cs中,确保在UseRouting之后、UseAuthorization之前添加UseCors:
// 定义CORS策略名称 const string MyAllowSpecificOrigins = "_myAllowSpecificOrigins"; builder.Services.AddCors(options => { options.AddPolicy(name: MyAllowSpecificOrigins, policy => policy.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader()); }); // ...其他配置 app.UseRouting(); // 启用CORS策略 app.UseCors(MyAllowSpecificOrigins); app.UseAuthorization(); // ...其他中间件
4. 添加Axios错误捕获
修改你的请求代码,添加错误捕获以获取更详细的错误信息:
const fetchUser = async () => { try { const url = `https://你的正确地址/api/NguoiDung`; const response = await axios.get(url); console.log(response.data); } catch (error) { console.error('请求失败:', error.message); if (error.response) { // 服务器返回了响应但状态码错误 console.error('状态码:', error.response.status); console.error('响应内容:', error.response.data); } else if (error.request) { // 请求已发送但无响应 console.error('请求详情:', error.request); } } };
5. 检查防火墙与网络
- 确保电脑防火墙允许5001端口(或HTTP的5000端口)的入站连接
- 真机设备需和电脑处于同一WiFi局域网,尝试用真机浏览器访问API地址,确认是否能正常返回数据
内容的提问来源于stack exchange,提问作者Quốc Thiệu
相关产品推荐
相关产品推荐

