taskWillPerformHTTPRedirection 从未在 Alamofire 5 中调用

Posted

技术标签:

【中文标题】taskWillPerformHTTPRedirection 从未在 Alamofire 5 中调用【英文标题】:taskWillPerformHTTPRedirection never called in Alamofire 5 【发布时间】:2020-03-23 20:54:00 【问题描述】:

将 Alamofire 更新到 5.0.4。正如标题所说,taskWillPerformHTTPRedirection 永远不会被调用。

在 Alamofire 4.x 中,我们可以这样做:

  let sessionDelegate =  request.session.delegate as! Alamofire.SessionDelegate

  sessionDelegate.taskWillPerformHTTPRedirection =  session, task, response, request in
    if let url = task.currentRequest?.url 
        // look at redirected url & act accordingly
      
    
  

请求的会话/委托已在 Alamofire 5 中进行了全面检查,不再可以从请求中直接访问。更具体地说,taskWillPerformHTTPRedirection 是对ClosureEventMonitor 的关闭回调。作为健全性检查,我使用其他一些闭包回调进行了测试......并且它们起作用了。

// ClosureEventMonitor

  let monitor = ClosureEventMonitor()
  monitor.requestDidCreateTask =  request, task in
     // Event fires
  

  let monitor2 = ClosureEventMonitor()
  monitor2.taskWillPerformHTTPRedirection =  sess, task, resp, req in
   // Event Never fires
  

  monitor2.requestDidFinish =  request in
    // Event Fires
  

  // Set up Session
  var session: Session? = Session(startRequestsImmediately: false, eventMonitors: [monitor, monitor2])

  let url = URL(string: "https://google.com")!
  let urlRequest = URLRequest(url: url)

  let trequest = session?.request(urlRequest)

作为参考,我的AppDelegatefunc application(_ application: UIApplication, continue userActivity: NSUserActivity 触发了此代码,用于处理深层/通用链接。

我不确定我在这里缺少什么。任何帮助是极大的赞赏。感谢您的宝贵时间。

【问题讨论】:

【参考方案1】:

这里有三件事:

首先,session?.request(urlRequest) 永远不会真正发出请求,因为您永远不会调用 resume()(或附加响应处理程序)。

其次,不推荐使用一次性的Session。一旦Session 超出范围,所有请求都将被取消。

第三,EventMonitors 不能与请求管道交互,它们只是观察性的。相反,使用 Alamofire 5 的新 RedirectHandler 协议或 Redirector 类型来处理重定向。 our documentation 中还有更多内容。自定义执行的操作的简单实现是:

let redirector = Redirector(behavior: .modify  task, request, response in
    // Customize behavior.
)
session?.request(urlRequest).redirect(using: redirector)

【讨论】:

以上是关于taskWillPerformHTTPRedirection 从未在 Alamofire 5 中调用的主要内容,如果未能解决你的问题,请参考以下文章