2016-08-10 4 views
0

그래서, 기본 옵션으로 Alamofire와 .POST 요청을 할 노력하고있어 :Alamofire .POST 인코딩 (.URL은)

Alamofire.request(.POST, url, parameters: parameters).validate().responseJSON 

이 하나가 잘 작동합니다. 설명서에 나와 있듯이 매개 변수의 기본 인코딩은 .URL입니다.

지금 내 코드는이 가이드 다음 라우터를 만드는 개선하기 위해 노력하고있어 : 구현의 끝에서 https://grokswift.com/router/

이 매개 변수를 수동으로 인코딩 할 필요가있다. 기본 작동 된 경우에 따라서, 나는과 같이, 지금 여기에 .URL 인코딩을 사용하고 있습니다 : 매개 변수가 분명히 잘못된 형식으로 전송되는대로

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

지금 요청이 작동하지 않습니다.

API가 제대로 작동하는지, Postman에서 테스트 중이며 매개 변수가 form-data 옵션과 함께 전송됩니다.

나를 도울 수있는 사람에게 미리 감사드립니다!

+0

어쩌면 당신은 alamofire의'multipartFormData' – Tj3n

+0

@ Tj3n을 사용해 볼 수 있습니다. 그러나 인코딩 방법이 같으면 기본 요청에서'multipartFormData'없이 라우터에서 작동하지 않는 이유는 무엇입니까? – Victor

+0

메신저에 대해 잘 모르겠다. 아마도 어쩌면 요청의 HTTPBody를 출력하여 값을보기 위해 다시 해독 할 수 있을까? – Tj3n

답변

1

가 이전에 작업 한 경우는 URL 인코딩을 사용하는 것을 다시 한 번 확인 :

let postRequest = Alamofire.request(.POST, url, parameters: parameters) 
    .validate() 
    .responseJSON { ... } 
debugPrint(postRequest) 

는 당신에게 당신의 요청에 대한 동등한 컬 문을 표시해야합니다 그.

그런 다음 .URL 인코딩을 사용하도록 라우터를 변경하고 debugPrint 출력이 변경되는지 확인하십시오.

+0

안녕하세요! 방금 시도했는데 사실은 .URL 인코딩입니다. 내가 Alamofire를 사용할 때.'Alamofire.request (.POST, baseApiAddress, parameters : parameters, encoding : .URL) .validate(). responseJSON' 또는'Alamofire.request (.POST, baseApiAddress + "/ users", parameters : parameters) .validate(). responseJSON' 요청은 동일하게 작동하므로 실제로는 .URL 인코딩입니다. 그러나 내가 말한 것처럼 라우터를하려고 할 때 .URL 인코딩이 작동하지 않습니다. – Victor

+0

아, 디버그 인쇄가 동일합니다! – Victor

+0

일부 조사가 완료되었으며'debugPrint'를 사용하면 헤더가 기본 'Alamofire.request'사이에서 동일하다는 것을 알 수 있으며 질문에 설명 된 라우터를 사용할 때 라우터의 'cURL'에'-d '문과 매개 변수는'URL' 자체에 들어갑니다. 기본 구현을 사용할 때 매개 변수는'-d' 문에 포함되며'URL'에는 포함되지 않습니다. 둘 다'.URL' 인코딩 옵션을 사용하고 있습니다. 무슨 일이 일어날 수 있는지에 대한 아이디어가 있습니까? – Victor

0

신속하고 객관적인 C에 대한 경험에 따라 POST로 요청할 때 특수 문자 나 공백이있을 때까지 인코딩을 통해 URL을 전달할 필요가 없습니다.

GET 요청을하는 경우 인코딩 된 URL을 항상 전달해야합니다. POST에서, 당신의 매개 변수는 무엇이든지, 몸 안에있는 폼 데이터로 전달됩니다. 어떤 코드도 그 (것)들을 요구하지 않는다.

코드에서 POST 메서드에서 URL 인코딩 부분을 제거하면됩니다.

0

매개 변수 인코딩을 JSON으로 설정할 수도 있습니다.

let encoding = Alamofire.ParameterEncoding.JSON 
+0

이미이 방법을 테스트 한 결과 작동하지 않았습니다! – Victor