2016-05-12 27 views
8

Desidero utilizzare Alamofire per recuperare un token al portatore da Web API ma sono nuovo per iOS e alamofire. Come posso realizzare questo con Alamofire?post application/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

La risposta seguente ha risolto il problema? Dovresti contrassegnarlo come accettato o fornire informazioni aggiuntive per risolvere il tuo problema. – Majster

risposta

12

Beh, non si ha realmente bisogno Alamofire fare questo (può essere fatto semplicemente utilizzando una pianura NSURLRequest), ma qui va:

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) 
} 

penso che le intestazioni possono essere omessi dal alamofire aggiungerà l'intestazione appropriata Content-Type. Fammi sapere se funziona.

È inoltre possibile trovare una tonnellata di specifiche with examples here.

+0

Affinché i dati del modulo siano nel corpo, è necessario rimuovere il parametro 'encoding' – Vince

+0

Se si ordina ad Alamofire di includere i parametri nel componente di query dell'URL, non si deve assolutamente impostare un tipo di contenuto. Altrimenti, se istruisci Alamofire per inserire i parametri nel corpo, automaticamente aggiungerà un header di tipo contenuto 'application/x-www-form-urlencoded', ma aggiunge anche erroneamente un parametro' charset' che non è definito per questo tipo MIME. – CouchDeveloper

+0

È necessario utilizzare URLEncoding.default per la codifica. – Babul

5

Ecco esempio di codice che dovrebbe funzionare con Alamofire 4.xe 3.x Swift come di agosto 2017:

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) 
} 

Non v'è alcuna necessità di impostare l'intestazione del tipo di contenuto esplicitamente, come è impostato da Alamofire automaticamente.