2015-01-03 8 views
21

मैं प्रति-अनुरोध के आधार पर रीडायरेक्ट (या नहीं) का पालन करने के लिए अलामोफ़ीयर को कॉन्फ़िगर करने का प्रयास कर रहा हूं।अलामोफायर: HTTP रीडायरेक्ट का पालन करें (या नहीं)

अलामोफ़ीयर का निजी आंतरिक वर्ग SessionDelegate है जो वर्तमान URL सत्र के लिए NSURLSessionTaskDelegate के रूप में कार्य करता है। SessionDelegate प्रासंगिक प्रतिनिधि विधि, URLSession(session:, task:, willPerformHTTPRedirection response:, request:, completionHandler:) लागू करता है जो वास्तव में मैं चाहता हूं।

इससे भी बेहतर, प्रतिनिधि का कार्यान्वयन taskWillPerformHTTPRedirection नामक कस्टम वैरिएबल क्लोजर का अनुपालन करता है ताकि यह निर्धारित किया जा सके कि रीडायरेक्ट को कैसे संभालना है - फिर से, बिल्कुल वही है जो मैं चाहता हूं!

और जहां तक ​​मैं कह सकता हूं, यह बंद हमेशा डिफ़ॉल्ट रूप से nil होता है - इसे आंतरिक रूप से अलामोफ़ीयर द्वारा असाइन नहीं किया जाता है - जो बताता है कि यह उपयोगकर्ता को इसे बंद करने का इरादा है।

समस्या: मैं taskWillPerformHTTPRedirection चर के बंद होने के लिए इस निजी SessionDelegate कक्षा तक नहीं पहुंच सकता। यह एक निजी वर्ग है और यह मेरी स्विफ्ट फाइलों के लिए दृश्यमान नहीं है। अलामोफायर अनुरोध को कॉन्फ़िगर करने का उचित माध्यम क्या नहीं है (नहीं) रीडायरेक्ट का पालन करें?

+0

AFnetworking HTTP मानकों का सम्मान करता है Alamofire के रूप में के बारे में पढ़ने के लिए अच्छा है। तो मुझे लगता है कि यह स्वचालित रूप से रीडायरेक्ट का पालन करता है। मुझे पता है क्योंकि मैंने पहले डोमेन बदल दिए हैं और ऐप रीडायरेक्ट का पालन करेगा बिना किसी समस्या के। – eddwinpaz

+0

एफ़नेटवर्किंग को रीडायरेक्ट का पालन न करने के लिए कॉन्फ़िगर किया जा सकता है। अलामोफायर निश्चित रूप से ऐसा करने की नींव रखता है। –

+0

जैसा कि अलामोफायर इतना कोड नहीं है और काफी युवा पुस्तकालय है, मैं केवल लाइब्रेरी को फोर्क करता हूं और कार्यवाही का उपयोग करके कार्यक्षमता को कार्यान्वित करता हूं जैसा कि आपने सही ढंग से देखा है। फिर बस एक पीआर जमा करें। ऐसा लगता है कि @mattt शुरुआत से ही उन हुक को वहां रखता है भले ही उन्हें अभी तक अलामोफ़ीयर सार्वजनिक एपीआई द्वारा उपयोग नहीं किया जाता है। –

उत्तर

8

फ्लेक्सिबल रीडायरेक्ट हैंडलिंग अब अल्मोफायर में another pull request के लिए धन्यवाद है और अलामोफायर 1.2.0 के साथ उपलब्ध है।

+0

यह बहुत अच्छा लग रहा है। अद्यतन के लिए धन्यवाद! –

+0

मैं 'सत्र डीलेगेट' की कस्टम क्लास बनाउंगा। 'Alamofire.SessionDelegate' संपत्ति सेटटेबल नहीं है। अलामोफायर में फिर से दिशा को कैसे रोकें। – pkc456

0

मुझे लगता है कि इस मुद्दे को बहुत समय पहले चर्चा की गई, इस issue

मैट का जवाब था जाँच हालांकि स्पष्ट:

मैं SessionDelegate, TaskDelegate, DataTaskDelegate में विभिन्न बंद टाइप गुण अनुमान और DownloadTaskDelegate का उद्देश्य है जिसका उपयोग ग्राहकों द्वारा विशेष प्रतिनिधियों को व्यवहार को बढ़ाने/ओवरराइड करने के लिए किया जाता है।


वास्तव में, जो गलत है। ये पूर्णता के लिए के लिए आंतरिक रूप से लागू किए गए हैं। अंतिम उपयोगकर्ता के लिए इच्छित कोई भी कार्यक्षमता प्रबंधक या पर पर खुलासा किया जाएगा।

वैसे भी मैं, देखते हैं कि इनाम हारून द्वारा की पेशकश की है, जबकि जोनाथन काँटेदार अपने ही version, तो क्यों आपको लगता है कि कांटा का उपयोग न?

3

आप इसे इस

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 प्रबंधक की तरह उपयोग कर सकते हैं रहता है delegate के रूप में मजबूत ताकि आप सुनिश्चित हो सकता है

public let delegate: SessionDelegate 

लेकिन याद willPerformHTTPRedirection

यह विधि केवल कहा जाता है डिफ़ॉल्ट और क्षणिक सत्र में कार्यों के लिए। पृष्ठभूमि सत्र में कार्य स्वचालित रूप से रीडायरेक्ट का पालन करें।

भी बुनियादी बातों Handling Redirects and Other Request Changes

संबंधित मुद्दे