模拟器请求本地ASP.NET服务器API失败:换IP仍报Network Request failed
我之前调试跨设备访问本地API时也踩过类似的坑,给你梳理几个必查的点,按顺序排查应该能解决:
先确认ASP.NET服务器的监听范围
默认情况下,很多ASP.NET项目只绑定到localhost(也就是127.0.0.1),这时候只有本机能访问,模拟器根本连不上。你得把服务器改成监听局域网IP或者所有地址:- 如果是ASP.NET Core,直接在
Program.cs里改启动地址:app.Run("http://0.0.0.0:54372"); - 或者去
launchSettings.json里修改applicationUrl,同时保留本地和局域网访问:"applicationUrl": "http://你的本地IP:54372;http://localhost:54372"
- 如果是ASP.NET Core,直接在
检查端口和防火墙
先打开命令提示符跑netstat -ano | findstr :54372,确认54372端口确实被你的ASP.NET进程占用(如果是其他进程,要么换端口要么杀掉占用的)。然后临时关闭电脑的防火墙试试——如果关闭后能访问,就给54372端口添加入站允许规则,别一直关着防火墙。确保模拟器和电脑在同一网段
模拟器的网络模式要选“桥接”或者“共享主机网络”,不然它和你的电脑不在一个局域网里,肯定连不上。你可以先在模拟器里打开浏览器,直接输入http://你的本地IP:54372/api/...测试,如果浏览器都拿不到数据,那问题肯定不在你的前端代码里。别漏了CORS配置
模拟器的请求属于跨域请求,如果ASP.NET服务器没开CORS,会直接拒绝响应。给服务器加个CORS配置:- ASP.NET Core的话,先在
Program.cs里注册服务:builder.Services.AddCors(options => { options.AddPolicy("AllowSimulator", policy => { policy.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader(); }); });
然后启用中间件:
app.UseCors("AllowSimulator");注意要把
UseCors放在UseRouting和UseAuthorization之间,不然可能不生效。- ASP.NET Core的话,先在
试试模拟器的特殊映射地址
比如Android Studio的模拟器有个专属地址10.0.2.2,这个地址会直接映射到主机的localhost,你可以把fetch里的IP换成这个试试:componentDidMount() { fetch('http://10.0.2.2:54372/api/...') // ... 其他代码 }这个小技巧有时候能绕开一堆网络配置问题。
先从这些点查起,应该很快能找到问题所在。
内容的提问来源于stack exchange,提问作者Linnot

