【问题标题】:Alamofire set request body with DataAlamofire 使用数据设置请求正文
【发布时间】:2019-05-23 15:21:45
【问题描述】:

在 objC 中我这样做:

NSData *postData = ...
NSMutableURLRequest *request = ...
[request setHTTPBody:postData];

在 Swift Alamofire 中怎么做?

Alamofire.request(url, method: .post, parameters: nil, encoding: URLEncoding.default, headers: headers)
    request.validate().responseJSON {
...
}

【问题讨论】:

  • 设置parameters ["some key" : "some data"] 和encoding: JSONEncoding.default
  • 这取决于postData 的性质,因为通常你宁愿只提供Dictionary 的Alamofire,它会为你准备请求的主体。如果您绝对必须构建请求,您实际上可以使用 Alamofire 直接发送该请求(例如 stackoverflow.com/q/28016578/1271826),但在这种情况下,您需要将 URL 和方法设置为 URLRequest 的一部分,而不是作为此方法的参数.而且你必须非常小心标题等。也许您可以告诉我们postData 的外观,我们可以提供进一步的建议。
  • 其实它是一个 zip 压缩包。看起来像下面的 Sh_Khan 评论可以提供帮助。

标签: swift networking alamofire


【解决方案1】:

Alamfire 接受[String:Any]

 do {
     let params  = try JSONSerialization.jsonObject(with: data, options: []) as! [String:Any]
     Alamofire.request(url, method: .post, parameters:params, encoding: JSONEncoding.default, headers: headers)
    request.validate().responseJSON {
     ...
    }
  } 
  catch {
      print(error)
  }

斯威夫特 4.2

Alamofire.request(url, method: .post, parameters: [:], encoding: "test", headers: [:])  

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
    }

}

【讨论】:

  • 让 data = "test".data(using: .utf8) let params = try? JSONSerialization.jsonObject(with: data, options: []) as! [String: Any] 参数为零??
  • 因为 test 是一个字符串,它的数据不能转换为 [String:Any] ,你能不能像 ["someKey":"test"] 一样?
  • 在这种情况下,我可以设置参数:作为字典而不尝试 JSONSerialization 等,但我需要与目标 C 中相同的东西:[request setHTTPBody:postData];我不知道该怎么做。
【解决方案2】:

使用 Alamofire 和 Swifty Json 库进行合适的 api 调用和 json 解析

迅捷的 Json https://github.com/SwiftyJSON/SwiftyJSON

阿拉莫火 https://github.com/Alamofire/Alamofire

首先在 [String: Any] 类型中创建参数列表

func CallAPI(){

    let parameters: [String: Any] = [
    "Username": "Admin",
    "Password": "123456",
    "Language_Code": "EN"]


    Alamofire.request("Your API Url", method: .post, parameters: parameters, encoding: JSONEncoding.default)
    .responseJSON { response in

    if((response.result.value) != nil) {

    let ResultJson = JSON(response.result.value!)

    print("ResultJson==",ResultJson)
    }
 }
}

【讨论】:

    猜你喜欢
    • 2018-12-12
    • 2017-05-15
    • 2017-03-29
    • 2015-10-04
    • 2021-01-13
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多