2015-01-03 23 views
21

Tôi đang cố gắng định cấu hình Alamofire để theo dõi chuyển hướng (hoặc không) trên cơ sở theo yêu cầu.Alamofire: Thực hiện theo các chuyển hướng HTTP (hoặc không)

Alamofire có lớp nội bộ riêng SessionDelegate đóng vai trò là NSURLSessionTaskDelegate cho phiên URL hiện tại. SessionDelegate thực hiện phương thức ủy nhiệm có liên quan, URLSession(session:, task:, willPerformHTTPRedirection response:, request:, completionHandler:), đó chính xác là những gì tôi muốn.

Thậm chí tốt hơn, việc thực hiện của đại biểu tham vấn một biến đóng tùy chỉnh có tên taskWillPerformHTTPRedirection để xác định cách xử lý chuyển hướng - một lần nữa, chính xác những gì tôi muốn!

Và theo như tôi có thể nói, đóng cửa đó luôn là nil theo mặc định - nó không được gán cho nội bộ bởi Alamofire - điều này cho thấy người dùng chỉ định đóng cửa cho nó.

Sự cố: Tôi không thể truy cập lớp học riêng tư SessionDelegate này để chỉ định đóng cửa cho biến số taskWillPerformHTTPRedirection của mình. Nó là một lớp riêng và nó không hiển thị với các tệp Swift của tôi. Các phương tiện thích hợp để cấu hình yêu cầu Alamofire là gì (không) theo các chuyển hướng?

+0

Alamofire như AFnetworking tôn trọng các tiêu chuẩn HTTP. vì vậy tôi giả sử nó tự động theo dõi chuyển hướng. Tôi biết vì tôi đã thay đổi tên miền trước và ứng dụng sẽ theo dõi chuyển hướng mà không gặp vấn đề gì. – eddwinpaz

+0

AFNetworking có thể được định cấu hình để không theo dõi chuyển hướng. Alamofire chắc chắn có nền tảng để làm như vậy. –

+0

Như Alamofire không phải là nhiều mã và là thư viện khá trẻ, tôi sẽ chỉ cần ngã ba thư viện và thực hiện các chức năng bản thân mình bằng cách sử dụng taskWillPerformHTTPRedirection khi bạn phát hiện chính xác. Sau đó, chỉ cần gửi một PR. Dường như @mattt đặt các móc đó tại chỗ ngay từ đầu ngay cả khi chúng chưa được sử dụng bởi API công cộng Alamofire. –

Trả lời

8

Xử lý chuyển hướng linh hoạt hiện có ở Alamofire nhờ another pull request và khả dụng với Alamofire 1.2.0.

+0

Điều này có vẻ tuyệt vời. Cảm ơn các cập nhật! –

+0

Tôi tạo lớp tùy chỉnh 'SessionDelegate'. Thuộc tính 'Alamofire.SessionDelegate' không thể cài đặt được. Làm thế nào để dừng lại hướng trong Alamofire. – pkc456

0

Tôi nghĩ vấn đề đó đã được thảo luận từ lâu rồi, kiểm tra issue

câu trả lời mờ của này đã được rõ ràng mặc dù:

Tôi đoán khác nhau thuộc tính đóng cửa, đánh máy trong SessionDelegate, TaskDelegate, DataTaskDelegate và DownloadTaskDelegate được dự định để khách hàng sử dụng để mở rộng/ghi đè các đại biểu cụ thể hành vi.


Trên thực tế, đó là không chính xác. Chúng được thực hiện trong nội bộ vì lợi ích của sự hoàn chỉnh của . Mọi chức năng dành cho người dùng cuối sẽ được hiển thị trên Người quản lý hoặc Yêu cầu.

Dù sao tôi thấy rằng tiền thưởng được cung cấp bởi Aaron, trong khi Jonathan chia hai ông riêng version, vậy tại sao không bạn sử dụng nĩa?

3

Bạn có thể sử dụng nó như thế này

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 quản lý giữ delegate mạnh, do đó bạn có thể chắc chắn

public let delegate: SessionDelegate 

nhưng hãy nhớ willPerformHTTPRedirection

Phương pháp này được gọi là chỉ cho các tác vụ trong phiên mặc định và không lâu. Công việc trong phiên nền sẽ tự động theo dõi chuyển hướng.

cũng tốt để đọc về nguyên tắc cơ bản Handling Redirects and Other Request Changes

Các vấn đề liên quan