2016-09-19 14 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

興味深い。あなたの素早い応答のおかげで、文字列のクラスを拡張するよりも生の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

関連する問題