繁体   English   中英

taskWillPerformHTTPRedirection 从未在 Alamofire 5 中调用

[英]taskWillPerformHTTPRedirection never called in Alamofire 5

将 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 for func application(_ application: UIApplication, continue userActivity: NSUserActivity deep/universal links 中func application(_ application: UIApplication, continue userActivity: NSUserActivity的。

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

这里有三件事:

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

其次,不建议使用像这样的一次性Session 一旦Session超出范围,所有请求都将被取消。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM