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

Alamofire中RequestInterceptor未被调用、adapt方法不执行如何解决?

问题原因及可行解决方案

可能原因

  • 拦截器adapt方法签名与Alamofire协议要求不匹配:你自定义了AdapterResult类型别名,可能导致方法重载没有被Alamofire正确识别,无法触发对应实现。
  • 调用的Session实例异常:存在误用Alamofire默认AF.request发起请求的情况,没有实际用到你配置了拦截器的自定义sessionManager实例。
  • URLRequestConvertible实现异常:你传入的route实例在执行asURLRequest()方法时抛出错误,Alamofire会直接返回错误结果,不会进入拦截器的adapt流程。
  • 缓存机制绕过拦截:如果请求命中了本地缓存且满足缓存生效规则,部分场景下不会触发拦截器逻辑。

解决方案

  1. 修正拦截器方法签名,删除自定义的AdapterResult类型别名,直接使用Alamofire协议要求的标准实现:
import Alamofire

class APIRequestInterceptor: RequestInterceptor {
    let retryLimit = 5
    let retryDelay: TimeInterval = 10
  
    func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result<URLRequest, Error>) -> Void) {
        var urlRequest = urlRequest
        
        debugPrint("In the request interceptor...")
        debugPrint(urlRequest)
        
        if let token = Globals.sharedInstance.token {
            urlRequest.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
        }
        completion(.success(urlRequest))
    }
  
    func retry(_ request: Request, for session: Session, dueTo error: Error, completion: @escaping (RetryResult) -> Void) {
        let response = request.task?.response as? HTTPURLResponse
        //Retry for 5xx status codes
        if
            let statusCode = response?.statusCode,
            (500...599).contains(statusCode),
            request.retryCount < retryLimit {
            completion(.retryWithDelay(retryDelay))
        } else {
            return completion(.doNotRetry)
        }
    }
}
  1. 全局排查请求发起代码,确认所有网络请求都调用你自定义的sessionManager.request方法,没有混用默认的AF.request。
  2. 排查URLRequestConvertible实现,在asURLRequest()方法中加断点或打印,确认方法正常返回URLRequest实例,没有抛出错误。
  3. 先使用最简单的原生字符串地址发起测试请求,确认拦截器是否正常触发,快速定位问题范围:
sessionManager.request("https://example.com").response { _ in }

如果该测试请求能触发adapt内部断点,说明问题出在你的URLRequestConvertible实现上;如果仍然无法触发,再排查Session实例的配置是否存在其他覆盖项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:48:02