[taskWillPerformHTTPRedirection在Alamofire 5中从未调用过

问题描述 投票:0回答:1

将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)

供参考,此代码已从我的AppDelegate func application(_ application: UIApplication, continue userActivity: NSUserActivity中触发以处理深层/通用链接。

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

ios swift alamofire
1个回答
0
投票

这里有三件事:

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

第二,不建议像这样使用Session之一。一旦Session超出范围,所有请求将被取消。

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

let redirector = Redirector(behavior: .modify { task, request, response in
    // Customize behavior.
})
session?.request(urlRequest).redirect(using: redirector)
© www.soinside.com 2019 - 2024. All rights reserved.