2016-09-19 92 views
9

我更新了我的項目Swift 3和Alamofire 4.我使用自定義編碼,但它更改爲其他編碼方法。我無法找到替代/等價於:Alamofire 4 Swift 3 ParameterEncoding自定義

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連接httpbody 4

+0

你身體裏有什麼?你確定它轉換爲一個字符串?你想如何發送?作爲JSON?或只是作爲一個字符串? – 2016-09-19 12:59:16

+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的類。 – CptEric

8

試試這種方法?

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

}) 
+0

這應該是被接受的答案,因爲不需要自定義實現'ParameterEncoding' – mosn

相關問題