如何在 Alamofire 中使用表单数据

how to use form data in Alamofire

在表单数据部分正文部分的邮递员中,当我将手机号码作为键传递并将手机号码作为 Int 值传递时,我得到了响应。但是当我在代码中这样做时,我不会得到预期的响应。

我的代码是

 func fetchRegisterData(){

          let url = registerApi
     
    var mobileNumber = mobilenumberTextfield.text
    
    let parameters = ["mobile" : mobileNumber] as [String : Any]
    
     AF.request(url,method: .post, parameters: parameters, encoding:JSONEncoding.default).responseJSON
              { response in switch response.result {
              case .success(let JSON):
                  print("response is :\(response)")
            
              case .failure(_):
                  print("fail")
                  }
          }
          
      }

如果您尝试将参数作为 multipart/form-data 传递,则必须使用 Alamofire:

中的上传方法
func fetchRegisterData() {
    let parameters = ["mobile": mobilenumberTextfield.text!]

    AF.upload(multipartFormData: { (multiFormData) in
        for (key, value) in parameters {
            multiFormData.append(Data(value.utf8), withName: key)
        }
    }, to: registerApi).responseJSON { response in
        switch response.result {
        case .success(let JSON):
            print("response is :\(response)")

        case .failure(_):
            print("fail")
        }
    }
}

对于正常的 Alamofire 请求 -

在 Alamofire 请求中将值作为参数传递时。您需要了解对 API.

有效的请求类型值的数据类型

在 API 结束时,这些值正在根据某些数据类型进行解析。 API 端必须对数据类型进行一些验证。

对于 mobileNumber,它可以是 Int 或 String

1 - let parameters = ["mobile" : mobileNumber] as [String : Int]
2 - let parameters = ["mobile" : mobileNumber] as [String : String]

对于多部分表单数据请求,必须使用如下所示的内容。但是,如果您不上传任何内容,则不应使用它。要求 API 团队更改 API 和正常参数请求

Alamofire.upload(multipartFormData: {  (multipartFormData) in
    
    //Try this
    multipartFormData.append(mobileNumber, withName: "mobile")
    //or this
    multipartFormData.append("\(String(describing: mobileNumber))".data(using: .utf8)!, withName: "mobile")

}, usingThreshold: 10 * 1024 * 1024, to: apiUrl, method: .post, headers: [:], encodingCompletion: { (encodingResult) in

    switch encodingResult {
                
            case .success(let upload, _, _):

            case .failure( _): 
                
            }
})