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

Swift5使用Alamofire5+调用Localhost API出现信任评估错误如何解决?

问题根因

错误noRequiredEvaluator(host: "localhost")的含义是Alamofire处理请求时,找不到host为localhost对应的服务端信任校验器,通常由以下原因导致:

  1. ServerTrustManager的校验器配置的host规则不匹配
  2. 发起请求时误用了默认的AF单例,没有使用自定义的带信任配置的Session
  3. 项目未配置App Transport Security(ATS)的本地网络访问例外
  4. 代码语法错误(如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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:54:03