You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

macOS Swift调用本地ASP.NET Core API报错“找不到指定主机”求助

解决macOS Swift App调用本地ASP.NET Core API时的主机找不到问题

嘿,这个问题我之前帮朋友排查过,核心原因就是macOS的安全策略在搞鬼——Safari和Postman不受这些限制,但你的Swift应用会被App Transport Security (ATS) 或者App Sandbox权限约束,给你一步步来解决:

1. 先确认API确实在正常运行

虽然你说Safari和Postman能访问,但还是再核对下细节:

  • 打开Visual Studio查看API的启动日志,确认它确实在http://localhost:5000监听(有时候ASP.NET Core默认会同时开启http://0.0.0.0:5000和https://localhost:5001,用localhost访问是没问题的)。
  • 再用Safari刷新一次http://localhost:5000/api/values,确保能正常返回JSON数据,排除API本身的问题。

2. 配置ATS允许本地请求

ATS默认是允许localhost的HTTP请求,但有时候应用配置会有偏差,你需要在Info.plist里添加例外设置:

  • 右键项目里的Info.plist,选择"Open As" -> "Source Code"
  • 插入这段XML代码:
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsLocalNetworking</key>
    <true/>
    <!-- 如果上面的设置不生效,再添加这个(仅限开发环境使用,发布应用时不能保留) -->
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

优先使用NSAllowsLocalNetworking,它专门针对本地网络请求,比全局允许所有请求的NSAllowsArbitraryLoads更安全。

3. 开启App Sandbox的网络权限

macOS的App Sandbox默认会限制网络请求,你得手动开启对应的权限:

  • 打开项目的"Signing & Capabilities"标签页
  • 找到"App Sandbox",确保勾选了Outgoing Connections (Client) 选项
  • 如果是本地局域网内的请求,也可以顺便勾选对应的本地网络权限

4. 再检查一遍URL是否有误

虽然概率不高,但有时候手滑会拼错内容,比如把localhost写成localost,或者端口号写错。你可以在代码里加一行打印验证:

if let url = URL(string: "http://localhost:5000/api/values") {
    print("URL格式正常: \(url)")
} else {
    print("URL格式错误!")
}

5. 尝试用本地IP代替localhost

偶尔localhost的解析会出现异常,你可以换成Mac的本地IP试试:

  • 打开终端,输入ipconfig getifaddr en0(无线网卡)或者ifconfig命令获取本地IP
  • 把代码里的URL改成http://你的本地IP:5000/api/values,比如http://192.168.3.10:5000/api/values

按照这些步骤排查,应该就能解决那个“找不到指定主机”的错误了。

内容的提问来源于stack exchange,提问作者Nathelol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:01:42