2015-03-06 14 views
9

के लिए एकाधिक एन्कोडिंग प्रकार मुझे POSTJSON ऑब्जेक्ट के साथ HTTP बॉडी के साथ अनुरोध करने की आवश्यकता है, लेकिन मुझे उसी अनुरोध में यूआरएल क्वेरी पैरामीटर का उपयोग करने की भी आवश्यकता है।अलामोफायर अनुरोध

POST: http://www.example.com/api/create?param1=value&param2=value 
HTTP Body: { foo : [ bar, foo], bar: foo} 

इस Alamofire द्वारा समर्थित है? मैं ऐसा कैसे कर पाऊंगा?

उत्तर

7

यह निश्चित रूप से एक वैध उपयोग केस है। मैं POST अनुरोध के लिए क्वेरी पैरामीटर के रूप में एक्सेस टोकन को जोड़ने की कोशिश करने के साथ समान मुद्दों में भाग गया हूं। यहां एक ऐसा फ़ंक्शन है जो आपके दृष्टिकोण के समान होने के लिए चीजों को थोड़ा आसान बनाना चाहिए।

func multiEncodedURLRequest(
    method: Alamofire.Method, 
    URLString: URLStringConvertible, 
    URLParameters: [String: AnyObject], 
    bodyParameters: [String: AnyObject]) -> NSURLRequest 
{ 
    let tempURLRequest = NSURLRequest(URL: NSURL(string: URLString.URLString)!) 
    let URLRequest = ParameterEncoding.URL.encode(tempURLRequest, parameters: URLParameters) 
    let bodyRequest = ParameterEncoding.JSON.encode(tempURLRequest, parameters: bodyParameters) 

    let compositeRequest = URLRequest.0.mutableCopy() as NSMutableURLRequest 
    compositeRequest.HTTPMethod = method.rawValue 
    compositeRequest.HTTPBody = bodyRequest.0.HTTPBody 

    return compositeRequest 
} 

इसके साथ ही कहा, तुम Github पर एक सुविधा का अनुरोध अंक में डाल करने के लिए सुनिश्चित कर सकता है? यह निश्चित रूप से कुछ है जिसे हमें यह पता लगाने की आवश्यकता है कि अलामोफायर में कैसे आसान बनाना है क्योंकि यह एक सामान्य उपयोग केस है। यदि आप अपने उपयोग के मामले का वास्तव में अच्छा विवरण डाल सकते हैं, तो मुझे यकीन है कि यह ध्यान आकर्षित करेगा। मैं निश्चित रूप से समर्थन जोड़ने के लिए प्रेस में मदद करूंगा।

+0

यह वैसे ही है जैसा मैं नीचे कर रहा हूं। धन्यवाद @ कून! मैंने पहले से ही अलामोफायर पर एक मुद्दा डाला है और @ मट्ट ने कहा है कि वह इस पर समर्थन करने की योजना नहीं बना रहा है, और जिस तरह से हम ऐसा कर रहे हैं, ऐसा करने का सही तरीका है। – AnthonyM

+0

अरे दोस्त, क्या आप मुझे अलामोफायर गिथब परियोजना पर मुद्दे # के साथ मार सकते हैं ताकि मैं एक नज़र देख सकूं? – cnoon

+1

# 374 https://github.com/Alamofire/Alamofire/issues/374 – AnthonyM

1

इस बिंदु पर, मैंने URL पैरामीटर के साथ NSURLRequest मैन्युअल रूप से एन्कोडिंग करके, उस अनुरोध से यूआरएल पुनर्प्राप्त करने और अंतिम अनुरोध बनाने के लिए इसका उपयोग करके इसे हल करने का निर्णय लिया है। मैं एक समारोह बना लिया है क्वेरी पैरामीटर इनकोडिंग अनुरोध वापस जाने के लिए:

private func queryParameterEncodedRequestURL(urlString: String, 
values: [String]) -> NSURL { 

    let URL = NSURL(string: urlString) 
    var request = NSURLRequest(URL: URL) 

    let parameters = [ 
    "param1": values[0]!, 
    "param2": values[1]! 
    ] 

    let encoding = Alamofire.ParameterEncoding.URL 
    (request, _) = encoding.encode(request, parameters: parameters) 

    return (request.URL, nil) 
} 

यह ठीक काम करता है, लेकिन मैं निश्चित रूप से और अधिक आसानी से Alamofire समर्थन कई प्रकार के एन्कोडिंग देखना चाहेंगे। यह मेरे लिए एक कामकाज की तरह लगता है।

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