Xamarin.iOS模拟器无法连接本地Restful API求助
解决Xamarin iOS模拟器连接本地IIS Express API的ConnectFailure问题
我之前开发Xamarin跨平台应用时,也踩过iOS模拟器连不上本地API的坑,结合你的情况,给你几个实用的排查和解决思路:
1. 修正IIS Express的绑定配置
IIS Express默认只绑定localhost或127.0.0.1,而iOS模拟器是独立的虚拟机,它的localhost指向自己,不是你的开发主机。你需要让IIS Express监听主机的局域网IP:
- 找到WebAPI项目下的隐藏
.vs文件夹,进入config目录打开applicationhost.config文件 - 找到对应网站的
<bindings>节点,添加一条绑定规则,替换成你的主机局域网IP(比如192.168.3.10):<bindings> <binding protocol="http" bindingInformation="*:5001:127.0.0.1" /> <binding protocol="http" bindingInformation="*:5001:localhost" /> <!-- 添加这条自定义绑定 --> <binding protocol="http" bindingInformation="*:5001:192.168.3.10" /> </bindings> - 重启IIS Express,确保它开始监听这个新的IP
2. 更新iOS模拟器的API地址
把iOS对应的BaseAddress从http://localhost:5001改成主机的局域网IP,比如:
public static string BaseAddress = Device.RuntimePlatform switch { Device.Android => "http://10.0.2.2:5001", Device.iOS => "http://192.168.3.10:5001", // 替换成你的主机实际局域网IP _ => "http://127.0.0.1:5001" }; public static string TodoItemsUrl = BaseAddress + "/api/Appointment/GetAppointments";
3. 检查Windows防火墙设置
Windows防火墙大概率会阻止外部设备(包括iOS模拟器)访问本地IIS Express端口:
- 打开「Windows Defender防火墙」→「高级设置」→「入站规则」
- 新建规则,选择「端口」,输入
5001,允许连接,完成配置 - 可以先临时关闭防火墙测试,若能连接则确认是防火墙问题,再保留规则即可
4. 验证API的可达性
在iOS模拟器里打开Safari,直接访问http://你的主机IP:5001/api/Appointment/GetAppointments:
- 如果Safari能正常返回数据,说明网络和API配置没问题,再排查Xamarin代码里的请求逻辑(比如超时设置、HTTP方法是否匹配)
- 如果Safari也打不开,回到前面的步骤检查IIS绑定和防火墙
额外小提示
如果你经常切换网络环境,不想每次改IP,可以在开发电脑上设置一个固定的局域网IP,这样BaseAddress不用频繁调整。
内容的提问来源于stack exchange,提问作者Whistler1
相关产品推荐
相关产品推荐

