使用 Alamofire 获得空响应

Posted

技术标签:

【中文标题】使用 Alamofire 获得空响应【英文标题】:Getting null response using Alamofire 【发布时间】:2020-04-27 18:19:29 【问题描述】:

  "vUserList": [
    
      "firstName": "Kate",
      "lastName": "Bell",
      "email": "katebell@mac.com"
    ,
    
      "lastName": "Higgins",
      "firstName": "Daniel",
      "email": "dhiggins@mac.com"
    ,
    
      "email": "JohnAppleseed@mac.com",
      "firstName": "John",
      "lastName": "Appleseed"
    ,
    
      "lastName": "Haro",
      "firstName": "Anna",
      "email": "annaharo@mac.com"
    ,
    
      "email": "hankzakroff@mac.com",
      "firstName": "Hank",
      "lastName": "Zakroff"
    
  ]

这是我需要发送到服务器的请求参数。

func getContactsParameters() -> [String : Any] 
        return [Keys.vUserList : arrContacts]
    

var headers = [
                Keys.XAPIKEY: "5dik8fo5yecc25bfcc562724dd674bde5fh5ju8y"
            ]

Alamofire.request("urlString", method: .post, parameters: getContactsParameters(), encoding: JSONEncoding.default, headers: headers).responseJSON  response in
                print(response)

getContactsParameters() 控制台日志如下, 作为回应,我的成功代码为 Null。

我与后端人员交谈过,他们说,如果我没有收到此密钥“vUserList”,那么您可能会得到空响应。但是,我仔细检查了拼写和所有内容。 另一种情况是,他们说如果我们没有在正确的 json 中收到请求,那么您可能会得到空响应。

我尝试了许多不同的解决方案,但都没有奏效。 :(

任何帮助表示赞赏!

这里附上邮递员截图。在邮递员中它工作正常。

【问题讨论】:

你能显示你的getContactsParameters()返回什么 也可以验证api使用的方法...是.get还是.post 先用postman试试,看看得到的响应码。 我认为您需要传递联系人数组的 JSON 字符串。您能否与后端人员交叉验证所需的格式? @iosArchitect.com 用 getContactsParameters() 返回更新了我的答案 【参考方案1】:

尝试将联系人数组的 JSON 字符串对象传递到 API 参数中。

let arrOfUserList : [[String : AnyObject]] = [
            ["firstName":"Kate" as AnyObject,"lastName":"Bell" as AnyObject,"email":"katebell@mac.com" as AnyObject],
            ["firstName":"Daniel" as AnyObject,"lastName":"Higgins" as AnyObject,"email":"dhiggins@mac.com" as AnyObject]
        ]

do 
    let data = try JSONSerialization.data(withJSONObject: arrOfUserList, options: [])
    let jsonString = NSString(data: data, encoding: String.Encoding.utf8.rawValue)

     if jsonString != nil 

        let paramsContact = [Keys.vUserList : jsonString]

            //Do your API calling code here
     
  catch 
      print(error.localizedDescription)
 

希望它对你有用。

【讨论】:

【参考方案2】:

检查你的邮递员后

请在您的请求中添加标题

let headers = [
    "Content-Type": "application/x-www-form-urlencoded"
]

如果不行的话

URLEncoding()URLEncoding.httpBodyURLEncoding.default 代替 JSONEncoding.default

【讨论】:

我尝试了上面的一个,并得到了这个响应。成功: 数据 = "";消息 = "";状态 = 1; @iGatiShah 你是否也添加了 URLEncoding.httpBody ?因为我认为您不需要像接受的答案中建议的那样手动进行解码 是的,我也添加了!但是,它不起作用!

以上是关于使用 Alamofire 获得空响应的主要内容,如果未能解决你的问题,请参考以下文章

使用 alamofire 首次单击时未获得 json 响应

如何使用 RxSwift 和 alamofire 获得嵌套 api 调用的响应?

使用 Alamofire 从 api 获得响应时的问题

请求 Alamofire

AlamoFire 图像内存问题

无法从 Alamofire 的 Swift 3 中的 Web 服务的 PATCH API 调用中获得响应