【问题标题】:Alamofire's Session timeOutInterval and cachePolicy setting is not reflected on URLRequestAlamofire 的 Session timeOutInterval 和 cachePolicy 设置未反映在 URLRequest 上
【发布时间】:2021-12-22 22:07:09
【问题描述】:

努力了解 Alamofire (5.2.2) 如何为请求设置 timeOutInterval 和 cachePolicy。

我有以下设置:

// Create Alamofire Session with custom cache and timeout interval settings
let configuration = URLSessionConfiguration.af.default
configuration.requestCachePolicy = .reloadIgnoringLocalCacheData
configuration.timeoutIntervalForRequest = 30
let session = Session(configuration: configuration)

// Create request and leaving request's timeout interval (60) and cache policy (rawValue - 0) on default.
let request = URLRequest(url: URL(string: "https://github.com")!)

// Fire request
session.request(request).response { response in
    print("### cachePolicy: \(response.request?.cachePolicy.rawValue)") // 0
    print("### timeoutInterval: \(response.request?.timeoutInterval)") // 60
    print("### session config: \(session.sessionConfiguration.timeoutIntervalForRequest)") // 30
    print("### session cachePolicy: \(session.sessionConfiguration.requestCachePolicy.rawValue)") // 1
}

这些配置选项的来源是什么?配置还是请求?
URLSessionConfiguration 中定义的内容会被实际使用吗?
如果是,那是否也不会覆盖URLRequest 中的公共属性?
是否因为在将会话配置设置应用于请求之前复制了 URLRequest 实例而没有被覆盖?

【问题讨论】:

    标签: ios swift alamofire


    【解决方案1】:

    Alamofire 的各种*Response 类型捕获的requestURLRequest Alamofire 在将其交给底层URLSession 实际执行之前看到的,因此它不会反映URLRequest 实际由任何任务执行。如果您需要该信息,您可以捕获 Alamofire 的 DataRequest 并查询 task?.currentRequest

    let request = session.request(request)
    response.response { response in 
        // Access request.task?.currentRequest
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-17
      • 2013-07-06
      • 2020-05-28
      • 1970-01-01
      • 1970-01-01
      • 2019-10-16
      相关资源
      最近更新 更多