27

我正在尝试将 Alamofire 配置为根据每个请求跟踪(或不跟踪)重定向。

Alamofire 有一个私有内部类SessionDelegate,用作NSURLSessionTaskDelegate当前 URL 会话。SessionDelegate确实实现了相关的委托方法,URLSession(session:, task:, willPerformHTTPRedirection response:, request:, completionHandler:)这正是我想要的。

更好的是,委托的实现参考了一个名为的自定义变量闭包taskWillPerformHTTPRedirection来确定如何处理重定向 - 再次,正是我想要的!

据我所知,默认情况下,闭包始终nil是默认的——它不是由 Alamofire 内部分配的——这表明它旨在让用户为其分配一个闭包。

问题:我无法访问这个私有SessionDelegate类来为其taskWillPerformHTTPRedirection变量分配闭包。它是一个私有类,对我的 Swift 文件不可见。将 Alamofire 请求配置为(不)遵循重定向的正确方法是什么?

4

3 回答 3

10

由于另一个拉取请求,现在在 Alamofire 中提供了灵活的重定向处理,并且可以在 Alamofire 中使用1.2.0

于 2015-04-09T18:27:20.717 回答
7

你可以像这样使用它

let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
let sessionDelegate = Manager.SessionDelegate()
sessionDelegate.taskWillPerformHTTPRedirectionWithCompletion = {
   (session: NSURLSession, task: NSURLSessionTask, response: NSHTTPURLResponse,
    newRequest: NSURLRequest, completionHandler: NSURLRequest? -> Void) in

    // do something
}

let manager = Manager(configuration: configuration, delegate: sessionDelegate)

Alamofire Manager 保持delegate强大,因此您可以确定

public let delegate: SessionDelegate

但请记住willPerformHTTPRedirection

仅对默认和临时会话中的任务调用此方法。后台会话中的任务会自动遵循重定向。

也很适合阅读有关处理重定向和其他请求更改的基础知识

于 2016-04-07T20:33:09.627 回答
0

我认为这个问题很久以前就已经讨论过了,检查这个问题

马特的回答很清楚:

我假设 SessionDelegate、TaskDelegate、DataTaskDelegate 和 DownloadTaskDelegate 中的各种闭包类型属性旨在供客户端用于扩展/覆盖特定的委托行为。


实际上,这是不正确的。为了完整起见,这些都是在内部实现的。任何针对最终用户的功能都将在ManagerRequest上公开。

无论如何,我看到 Aaron 提供了赏金,而 Jonathan 分叉了他自己的版本,那你为什么不使用那个分叉呢?

于 2015-04-09T08:45:54.930 回答