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)
作为参考,我的AppDelegate
func application(_ application: UIApplication, continue userActivity: NSUserActivity
触发了此代码,用于处理深层/通用链接。
我不确定我在这里缺少什么。任何帮助是极大的赞赏。感谢您的宝贵时间。
【问题讨论】:
【参考方案1】:这里有三件事:
首先,session?.request(urlRequest)
永远不会真正发出请求,因为您永远不会调用 resume()
(或附加响应处理程序)。
其次,不推荐使用一次性的Session
。一旦Session
超出范围,所有请求都将被取消。
第三,EventMonitor
s 不能与请求管道交互,它们只是观察性的。相反,使用 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 中调用的主要内容,如果未能解决你的问题,请参考以下文章