【问题标题】:Replicating post method in Postman with parameters and body-raw into Alamofire将 Postman 中带有参数和 body-raw 的 post 方法复制到 Alamofire
【发布时间】:2018-02-14 09:59:35
【问题描述】:

我在使用 Alamofire 时遇到问题。当我尝试使用诸如["name":"John", "age":"27"] 之类的通用参数发布请求时,它总是会成功。但是,当我尝试使用需要参数的 Web 服务和 base64 字符串的 body-raw 时,我无法从服务器获得成功的响应。虽然当我使用 Postman 时它成功了。有谁知道如何在 Alamofire 4 上执行此操作?这是我邮递员的截图。

谢谢!

【问题讨论】:

标签: ios swift3 alamofire


【解决方案1】:

@nathan- 这是我使用的代码。我只是假设“let paramsDict”中的base64String有一个名为“data”的键值,尽管它在邮递员中没有键名。

let urlString = ApiManager.sharedInstance.formsURL + ApiManager.sharedInstance.mobileFormsImageUpload
        let paramsDict = ["token": token, "fileID":"2", "filename":"images.png", "data": base64String] as [String : Any]

        Alamofire.request(urlString, method: .post, parameters: paramsDict, encoding: URLEncoding.httpBody, headers: [:])
            .responseJSON{ response in

                switch response.result {
                case .success(let data):

                    debugPrint("SUCCESS")


                case .failure(let error):
                    debugPrint("Request Error")

                }
        }

【讨论】:

    【解决方案2】:

    我已经想通了。它需要自定义编码才能使其工作。所有参数都必须与 url 内联,因此参数内的 base64 字符串是唯一要编码的。这是我使用的代码。

    struct CustomPostEncoding: ParameterEncoding {
    func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest {
        var request = try URLEncoding().encode(urlRequest, with: parameters)
    
        let base64 = parameters?["data"] as! String
        let finalBase64Format = "\"" + base64 + "\""
        let postData = NSData(data: finalBase64Format.data(using: String.Encoding.utf8)!)
        request.httpBody = postData as Data
        return request
    }
    }
    
    func uploadImageBase64(){
    
    
        let jpegCompressionQuality: CGFloat = 0.9 // Set this to whatever suits your purpose
        if let base64String = UIImageJPEGRepresentation(testIMG, jpegCompressionQuality)?.base64EncodedString() {
    
            var token = String()
            if let data = UserDefaults.standard.data(forKey: "userProfile"),
                let user = NSKeyedUnarchiver.unarchiveObject(with: data) as? UserProfile{
                token = user.token
            } else {
                print("There is an issue")
            }
    
            let headers = [
                "content-Type": "application/json"
            ]
            let urlString = "http://localhost/FormsService.svc/Getbase64?filename=test.png&fileID=1151&token=80977580xxx"
            let paramsDict = ["data": base64String] as [String : Any]
            Alamofire.request(urlString, method: .post, parameters: paramsDict, encoding: CustomPostEncoding(), headers: headers)
    
                .responseJSON{ response in
                    print("response JSON \(response.result)")
            }
                .response{ response in
                    print("RESPONSE \(response)")
            }
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-01-20
      • 2020-09-26
      • 2016-09-06
      • 1970-01-01
      • 2021-09-22
      • 1970-01-01
      • 1970-01-01
      • 2019-05-26
      • 2016-08-20
      相关资源
      最近更新 更多