Alamofire 4.3 无法发送 JSON 请求

Posted

技术标签:

【中文标题】Alamofire 4.3 无法发送 JSON 请求【英文标题】:Alamofire 4.3 can't send JSON request 【发布时间】:2017-01-22 15:06:20 【问题描述】:

我正在尝试使用 Alamofire 发送 JSON 请求,但它不能作为 JSON 请求工作,这是我的 JSON:

"ClientID":"55050","AdminId":"myemail","Password":"123"

content-type →  application/json; charset=utf-8

这是我的代码:

import Alamofire

func doLogin(username:String ,password:String) 
    let parameters = ["ClientID":"55050" , "AdminId":username,"Password":password]

    Alamofire.request("myurl.com", method: .post, parameters: parameters, encoding: JSONEncoding(options: []) ).responseJSON(completionHandler: 
        response in
        print(response)
    )

这是我得到的回应

FAILURE: responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 3." UserInfo=NSDebugDescription=Invalid value around character 3.))

【问题讨论】:

根据错误,问题出在您服务器的响应上。 我用邮递员试了一下,效果很好 【参考方案1】:

通过阅读文档,我只需将标头设置为 application/json

所以我添加了额外的参数头:

let headers: HTTPHeaders = [
            "Authorization": "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==",
            "Accept": "application/json"
        ]
 Alamofire.request(ApiKeys().login, method : .post , parameters : parameters, encoding: JSONEncoding.default ,  headers: headers).responseJSON  response in

        

现在它工作得很好,感谢大家的帮助:)

【讨论】:

【参考方案2】:

看来您的请求中一定遗漏了标头。所以,一直没有回应。 您的标题必须是字典 [String: String]

let header = ["Content-Type" : "application/json"]

您的示例请求应该是:

Alamofire.request(getCategoryPath, method: .post, parameters: parameters, encoding: URLEncoding.default, headers: header)
        .responseJSON  response in
     guard response.result.error == nil else 
            print(response.result.error!)


print(response.result.value)

【讨论】:

以上是关于Alamofire 4.3 无法发送 JSON 请求的主要内容,如果未能解决你的问题,请参考以下文章

试图在 alamofire 中发送 json 对象,但它在 json 数组中

在 swift 中使用 alamofire 发送 JSON 数组作为参数

如何在 Alamofire 中将正文类型设置为 JSON?

Json 解析 Swift 3 Alamofire

使用 Alamofire 解码 json 时出错

带有 Swift 3 的 Alamofire 4.3,POST 请求不适用于 URL 参数