2016-05-12 9 views
8

Ich möchte Alamofire verwenden, um ein Bearer-Token von Web-API abrufen, aber ich bin neu bei IOS und Alamofire. Wie kann ich dies mit Alamofire erreichen?Post-Anwendung/x-www-form-urlencoded Alamofire

func executeURLEncodedRequest(url: URL, model: [String : String]?, handler: RequestHandlerProtocol) { 
    addAuthorizationHeader() 
    Alamofire.request(.POST,createUrl(url), parameters: model, headers: headers,encoding:.Json) 
} 
+0

Hat die folgende Antwort Ihr Problem gelöst? Sie sollten es als akzeptiert markieren oder zusätzliche Informationen zur Verfügung stellen, um Ihr Problem zu lösen. – Majster

Antwort

12

Nun, Sie wirklich nicht Alamofire brauchen, dies zu tun (es einfach sein kann mit einem einfachen NSURLRequest getan), aber hier geht:

let headers = [ 
    "Content-Type": "application/x-www-form-urlencoded" 
] 
let parameters = [ 
    "myParameter": "value" 
] 
let url = NSURL(string: "https://something.com")! 
Alamofire.request(.POST, url, parameters: parameters, headers: headers, encoding: .URLEncodedInURL).response { request, response, data, error in 
    print(request) 
    print(response) 
    print(data) 
    print(error) 
} 

Ich denke, dass die Header seit alamofire verzichtet werden kann wird den entsprechenden Header Content-Type anhängen. Lass mich wissen ob es funktioniert.

Sie können auch eine Tonne der Spezifikation with examples here finden.

+0

Damit sich die Formulardaten im Hauptteil befinden, sollte der Parameter 'encoding' entfernt werden. – Vince

+0

Wenn Sie Alamofire anweisen, die Parameter in die Abfragekomponente der URL aufzunehmen, sollten Sie überhaupt keinen Inhaltstyp festlegen. Andernfalls, wenn Sie Alamofire anweisen, die Parameter in den Rumpf einzufügen, fügt es automatisch einen Inhaltstypheader 'application/x-www-form-urlencoded' für Sie hinzu - fügt aber fälschlicherweise auch einen Parameter' charset' hinzu, für den nicht definiert ist dieser MIME-Typ. – CouchDeveloper

+0

Verwenden Sie URLEncoding.default zum Enkodieren. – Babul

5

Hier ist Beispielcode, mit Alamofire 4.x und Swift 3.x ab August 2017 funktionieren soll: explizit

let parameters = [ 
    "myParameter": "value" 
] 
Alamofire.request("https://something.com", method: .post, parameters: parameters, encoding: URLEncoding()).response { response in 
    print(response.request) 
    print(response.response) 
    print(response.data) 
    print(response.error) 
} 

Es besteht keine Notwendigkeit, um die Content-Type-Header, wie er eingestellt ist von Alamofire automatisch.