リクエストごとにリダイレクトに従うように(または従わないように)Alamofireを構成しようとしています。
Alamofireには、現在のURLセッションのSessionDelegate
として機能するプライベート内部クラスNSURLSessionTaskDelegate
があります。 SessionDelegate
は、関連するデリゲートメソッドURLSession(session:, task:, willPerformHTTPRedirection response:, request:, completionHandler:)
を実装します。これは、まさに私が望むものです。
さらに良いことに、デリゲートの実装は、taskWillPerformHTTPRedirection
という名前のカスタム変数クロージャを参照して、リダイレクトの処理方法を決定します。これも、まさに私が望むものです。
そして、私が知る限り、クロージャはデフォルトで常にnil
であり、Alamofireによって内部的に割り当てられていません。これは、ユーザーがクロージャを割り当てることを目的としていることを示しています。
問題:このプライベートSessionDelegate
クラスにアクセスして、そのtaskWillPerformHTTPRedirection
変数にクロージャを割り当てることができません。これはプライベートクラスであり、私のSwiftファイルには表示されません。リダイレクトに従う(従わない)ようにAlamofireリクエストを構成する適切な方法は何ですか?
別のプルリクエスト のおかげで、柔軟なリダイレクト処理がAlamofireに追加され、Alamofire 1.2.0
で使用できるようになりました。
このように使えます
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
このメソッドは、デフォルトセッションとエフェメラルセッションのタスクに対してのみ呼び出されます。バックグラウンドセッションのタスクは、自動的にリダイレクトに従います。
ファンダメンタルズについても読むのが良い リダイレクトやその他のリクエストの変更の処理
この問題はずっと前に議論されたと思います、これをチェックしてください問題
マットの答えは明らかでした:
SessionDelegate、TaskDelegate、DataTaskDelegate、およびDownloadTaskDelegateのさまざまなクロージャー型のプロパティは、特定のデリゲートの動作を拡張/オーバーライドするためにクライアントが使用することを目的としていると思います。
実際、それは正しくありません。これらは、完全を期すために内部で実装されています。エンドユーザー向けの機能は、ManagerまたはRequestで公開されます。 。
とにかく、私はバウンティがアーロンによって提供されているのを見ますが、ジョナサンは彼自身をフォークしましたバージョン ?