.NET API在Swagger正常但React Native Expo模拟器无法调用问题
排查方向与解决方案
1. API地址与网络绑定配置问题
- 检查React Native请求代码中的API地址:如果用的是
localhost,Android模拟器会将其解析为自身而非你的电脑,需替换为电脑的局域网IP(如http://192.168.1.100:5000),或Android模拟器专用的10.0.2.2(映射主机的localhost)。 - 确认.NET API的绑定地址:在
Program.cs或launchSettings.json中,确保API绑定到0.0.0.0而非仅localhost,否则局域网内的模拟器/网页端无法访问。例如在Program.cs中添加:builder.WebHost.UseUrls("http://0.0.0.0:5000");
2. CORS跨域配置验证
- 检查
Program.cs中的CORS规则:确认是否允许了React Native网页端/模拟器的请求源。若仅限制了特定端口(如Swagger的端口),需添加expo默认端口(如http://localhost:19006)或直接允许所有源测试(生产环境不建议):builder.Services.AddCors(options => { options.AddPolicy("AllowAll", policy => { policy.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader(); }); }); app.UseCors("AllowAll"); // 注意要放在UseRouting之后、UseAuthorization之前 - 验证CORS中间件顺序:错误的顺序会导致跨域规则不生效,必须保证
UseCors在路由和授权中间件之前执行。
3. 本地防火墙/安全软件拦截
- 临时关闭电脑防火墙:若关闭后请求正常,说明防火墙拦截了API端口的入站请求,需手动添加规则允许该端口(如5000)的HTTP流量。
- 排查杀毒软件/网络安全工具:部分安全软件会默认拦截本地服务的外部请求,可暂时禁用后测试。
4. Expo网页端代理配置
- 若网页端请求失败,可在
app.json中配置代理,将API请求转发到本地服务:{ "expo": { "web": { "proxy": "http://your-local-ip:5000" } } } - 配置后请求路径可简化为
/api/xxx,无需完整域名。
5. Android模拟器网络测试
- 在模拟器内置浏览器中直接访问API地址(如
http://192.168.1.100:5000/api/values),如果无法打开,说明模拟器与主机网络不通,需检查模拟器网络模式(优先用NAT模式)。 - 重启模拟器或重置网络设置,排除模拟器自身的网络异常。
内容的提问来源于stack exchange,提问作者Koppinio
相关产品推荐
相关产品推荐

