Expo应用无法向.NET 6 Web Api后端发起Axios GET请求
解决Expo前端连接ASP.NET 6后端超时问题
1. 修正CORS配置错误
你的CORS代码里重复写了AllowAnyHeader(),缺少允许HTTP方法的配置,这会导致后端拒绝非OPTIONS的请求。修正后的代码:
builder.Services.AddCors(policyBuilder => policyBuilder.AddDefaultPolicy(policy => policy.WithOrigins("*") .AllowAnyHeader() .AllowAnyMethod()) // 替换重复的AllowAnyHeader为AllowAnyMethod ); var app = builder.Build(); // 确保UseCors放在正确的中间件顺序:在UseAuthorization和MapControllers之前 app.UseCors(); app.UseAuthorization(); app.MapControllers();
2. 确认后端监听地址与防火墙放行
- 检查
launchSettings.json中的applicationUrl是否为http://[你的IPv4]:[端口号],确保不是仅监听localhost或127.0.0.1。 - 打开Windows防火墙,添加入站规则,允许后端使用的端口通过TCP连接(比如端口5000)。
- 用命令
netstat -ano | findstr :[端口号]验证后端是否在监听指定的IPv4地址,确保输出中包含你的IPv4(而非仅127.0.0.1)。
3. 修正Expo端请求配置
- 确保请求URL使用电脑的IPv4地址,不要用localhost,比如:
http://192.168.1.100:5000/api/xxx。 - iOS 14+默认阻止HTTP请求,需在
app.json中添加配置允许HTTP访问你的后端地址:
{ "expo": { "ios": { "infoPlist": { "NSAppTransportSecurity": { "NSExceptionDomains": { "192.168.1.100": { // 替换为你的电脑IPv4 "NSIncludesSubdomains": true, "NSExceptionAllowsInsecureHTTPLoads": true } } } } } } }
开发环境下也可以临时允许所有HTTP请求(仅用于测试,正式环境禁用):
"NSAppTransportSecurity": { "NSAllowsArbitraryLoads": true }
4. 排查网络环境问题
- 检查路由器是否开启了AP隔离功能,该功能会阻止同一WiFi下设备之间的通信,需要关闭此设置。
- 在iOS设备的浏览器中直接访问后端API地址(比如
http://192.168.1.100:5000/api/values),如果浏览器也无法访问,说明是网络或后端配置问题;如果浏览器能访问,再排查Expo的请求代码。
5. 验证请求代码正确性
确保请求路径和后端路由完全匹配,比如后端路由是[Route("api/[controller]")],控制器是ValuesController,则请求路径应为/api/values。
内容的提问来源于stack exchange,提问作者Abby Enache
相关产品推荐
相关产品推荐

