web-dev-qa-db-fra.com

POST demande avec données dans le corps avec Alamofire 4

comment est-il possible d'envoyer une demande POST avec des données dans le corps HTTP avec Alamofire 4? J'ai utilisé l'encodage personnalisé à Swift 2.3, cela fonctionnait bien. J'ai converti mon code Swift 3 et j'ai essayé de coder mais je ne travaille pas. Ce code:

public struct MyCustomEncoding : ParameterEncoding {
private let data: Data
init(data: Data) {
    self.data = data
}
public func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest {

    var urlRequest = try urlRequest.asURLRequest()        
    do {            
            urlRequest.httpBody = data
            urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")

    } catch {
        throw AFError.parameterEncodingFailed(reason: .jsonEncodingFailed(error: error))
    }

    return urlRequest
}

et demande d'Alamofire:

let enco : ParameterEncoding = MyCustomEncoding(data: ajsonData)
    Alamofire.request(urlString, method: .post , parameters: [:], encoding: enco , headers: headers).validate()
                .responseJSON { response in
                    switch response.result {
                    case .success:
                        print(response)

                        break
                    case .failure(let error):

                        print(error)
                    }
    }
10
Cagatay

Vous devez envoyer une demande comme ci-dessous dans Swift 3

let urlString = "https://httpbin.org/get"

Alamofire.request(urlString, method: .post, parameters: ["foo": "bar"],encoding: JSONEncoding.default, headers: nil).responseJSON {  
response in
  switch response.result {
                case .success:
                    print(response)

                    break
                case .failure(let error):

                    print(error)
                }
}
34
Ekta Padaliya

Cela fonctionnera mieux dans Swift 4.

let url = "yourlink.php". // This will be your link
let parameters: Parameters = ["User_type": type, "User_name": name, "User_email": email, "User_contact": contact, "User_password": password, "from_referral": referral]      //This will be your parameter

Alamofire.request(url, method: .post, parameters: parameters).responseJSON { response in
    print(response)
}
2
Raghib Arshi

Méthode Alamofire pour GET et POST utilisant Alamofire

1.Créez un fichier nommé "GlobalMethod" à usage multiple

import Alamofire
class GlobalMethod: NSObject {

    static let objGlobalMethod = GlobalMethod()

    func ServiceMethod(url:String, method:String, controller:UIViewController, parameters:Parameters, completion: @escaping (_ result: DataResponse<Any>) -> Void) {

            var headers = Alamofire.SessionManager.defaultHTTPHeaders
            headers["HeaderKey"] = "HeaderKey"
            if method == "POST" {
                methodType = .post
                param = parameters
            }
            else {
                methodType = .get
            }
            Alamofire.request(url, method: methodType, parameters: param, encoding: JSONEncoding.default, headers:headers
                ).responseJSON
                { response in

                    completion(response)
            }
        }
}
  1. Dans l'appel View Controller "ServiceMethod" créé dans GlobalMethod en envoyant des valeurs à l'appel du service API

    let urlPath = "URL STRING"
    let methodType = "GET" or "POST" //as you want
    let params:[String:String] = ["Key":"Value"]
    
    GlobalMethod.objGlobalMethod.ServiceMethod(url:urlPath, method:methodType, controller:self, parameters:params)
            {
                response in
    
                if response.result.value == nil {
                    print("No response")
                    return
                }
                else {
                  let responseData = response.result.value as! NSDictionary
                  print(responseData)
                }
            }
    
0
Sandeep Kalia