2016-09-19 3 views
9

내 프로젝트를 Swift 3 및 Alamofire 4로 업데이트했습니다. 사용자 지정 인코딩을 사용하고 있었지만 다른 인코딩 방법으로 변경되었습니다. 나는이 동등/대안을 찾을 수 없습니다입니다 :Alamofire 4 Swift 3 ParameterEncoding Custom

alamoFire.request(urlString, method: HTTPMethod.post, parameters: [:], encoding: .Custom({ 
     (convertible, params) in 

     let mutableRequest = convertible.URLRequest.copy() as! NSMutableURLRequest 
     let data = (body as NSString).data(using: String.Encoding.utf8) 
     mutableRequest.httpBody = data 
     return (mutableRequest, nil) 

    }), headers: headers()).responseJSON { (responseObject) -> Void in 

     switch responseObject.result { 
     case .success(let JSON): 
      success(responseObject: JSON) 

     case .failure(let error): 
      failure(error: responseObject) 
     } 
    } 

나는 또한 URLRequest 객체와 간단한 요청하여 시도의 일부 방향으로 날 지점 마십시오 나에게 오류

var request = URLRequest(url: URL(string: urlString)!) 
    let data = (body as NSString).data(using: String.Encoding.utf8.rawValue) 
    request.httpBody = data 
    request.httpMethod = "POST" 
    request.allHTTPHeaderFields = headers() 

    alamoFire.request(request).responseJSON { (responseObject) -> Void in 

     switch responseObject.result { 
     case .success(let JSON): 
      success(JSON) 

     case .failure(let error): 
      failure(responseObject, error) 
     } 
    } 

을주는 방법 Alamofire 4와 함께 httpbody를 첨부하십시오.

+0

신체에 무엇이 있습니까? 당신은 확실히 문자열로 변환합니까? 어떻게 보내고 싶니? JSON으로? 아니면 그냥 문자열로? –

+0

@AlvinVarghese 원시 데이터 –

답변

11

Alamofire 4.0에서는 ParameterEncoding 프로토콜을 사용해야합니다. 다음은 어떤 것이 든 StringUTF8을 인코딩 할 수있는 예입니다.

extension String: ParameterEncoding { 

    public func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest { 
     var request = try urlRequest.asURLRequest() 
     request.httpBody = data(using: .utf8, allowLossyConversion: false) 
     return request 
    } 

} 

Alamofire.request("http://mywebsite.com/post-request", method: .post, parameters: [:], encoding: "myBody", headers: [:]) 
+0

enconding : "myBody"는이 예제의 다른 코드와 어떤 관련이 있습니까? 이 대답은 받아 들여지지 않지만 불완전합니다. – CptEric

+0

"myBody"는 요청 본문을 나타내는 예제 문자열 일뿐입니다. 기본적으로'String'을'coding' 매개 변수로 사용할 수는 없지만 제 예제에서'extension'을 사용하면됩니다. – Silmaril

+0

흥미 롭습니다. 빠른 응답을 주셔서 String 클래스를 확장하는 것보다 원시 enconding을 제공하는 좀 더 우아한 방법이 있어야합니다. – CptEric

8

이 방법을 시도해보십시오.

Alamofire.request(url, method: HTTPMethod.post, parameters: parameters, encoding: URLEncoding.httpBody, headers: nil).responseObject(completionHandler: { (response : DataResponse<T>) in 

}) 
+0

이것은 'ParameterEncoding'의 커스텀 구현을 필요로하지 않기 때문에 받아 들여진 대답이어야합니다. – mosn

관련 문제