Swift5使用Alamofire5+调用Localhost API出现信任评估错误如何解决?
问题根因
错误noRequiredEvaluator(host: "localhost")的含义是Alamofire处理请求时,找不到host为localhost对应的服务端信任校验器,通常由以下原因导致:
- ServerTrustManager的校验器配置的host规则不匹配
- 发起请求时误用了默认的
AF单例,没有使用自定义的带信任配置的Session - 项目未配置App Transport Security(ATS)的本地网络访问例外
- 代码语法错误(如URL字符串未加引号)
解决方案
步骤1:正确配置ServerTrustManager
Alamofire 5+的ServerTrustManager默认开启allHostsMustBeEvaluated=true,要求所有请求的host都必须配置对应的校验器,调整配置如下:
private let session: Session = { // 配置localhost的校验器为禁用信任校验,无需带端口 let manager = ServerTrustManager( evaluators: ["localhost": DisabledTrustEvaluator()], allHostsMustBeEvaluated: false // 非匹配host走系统默认校验,避免无匹配时报错 ) let configuration = URLSessionConfiguration.af.default return Session(configuration: configuration, serverTrustManager: manager) }()
步骤2:修正请求代码
注意URL字符串必须加双引号,且必须使用你自定义的session实例发起请求,不能用默认的AF.request:
// 补全URL字符串的双引号 let strURL = "https://localhost:44301/api/authenticate" session.request(strURL, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers).responseJSON { response in // 处理响应逻辑 }
步骤3:配置Info.plist ATS例外
在项目Info.plist中添加本地网络访问许可,避免ATS规则拦截请求:
右键Info.plist选择「Open As -> Source Code」,粘贴以下配置:
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsLocalNetworking</key> <true/> <!-- 本地开发调试用,生产环境请删除该行 --> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
步骤4:清理缓存重新运行
修改完配置后执行以下操作,避免旧缓存影响:
- 按
Command + Shift + K清空Xcode构建缓存 - 删除模拟器/真机上已安装的App
- 重新编译运行项目
注意:禁用SSL校验仅适用于本地开发场景,生产环境请使用正规CA机构颁发的有效SSL证书,避免出现安全漏洞。
内容的提问来源于stack exchange,提问作者Jis Thottan
相关产品推荐
相关产品推荐

