Alamofire httpBody 在 swift 5 中显示 500 statusCode

Posted

技术标签:

【中文标题】Alamofire httpBody 在 swift 5 中显示 500 statusCode【英文标题】:Alamofire httpBody show 500 statusCode in swift 5 【发布时间】:2019-12-31 15:52:52 【问题描述】:

我正在使用 Alamofire 5。我已将参数放入 httpbody。我已经在 Postman 中运行过它,它运行良好。我的身体参数如下。


"user_id": "user_id",
"username": "user_name",
"password": "pass",
"token": "",
"type_id": 100,
"country_id": 1,
"language_id": 1,
"customer_id": 1,
"parent_user_id": "",
"profile": 
 

我使用下面的代码使用 Alamofire 5 提出请求。这是代码:

func change_password() 

let headers: HTTPHeaders = [
    "Content-Type": "application/json",
    "YumaSession": Global_Variable.globalValue.session_id
]
let parameters:Parameters = [
    "user_id": "user_id",
    "username":  "username",
    "password": txtPassword.text!,
    "token": "",
    "type_id": 100,
    "country_id": 1,
    "language_id": 1,
    "customer_id": 1,
    "parent_user_id": "",
    "profile": []
]

AF.request( url,method: .put,parameters: parameters,encoding: URLEncoding.httpBody,headers: headers).responseJSON response in

    switch response.result 
    case .success(let responseData):
        print("responseData-->",response.response!.statusCode)
    case .failure(let error):
        print("error--->",error)
    
    
   

以上代码返回 500 状态代码。代码上面有什么问题?

【问题讨论】:

您可以告诉 POSTMAN 在 CURL 中生成等效请求,并使用 Alamofire 中的功能将请求打印为 CURL 之一(参见 ***.com/questions/53637437/alamofire-with-d/…)并比较两个代码。您将能够发现差异。但是URLEncoding.httpBody,作为 URLEncoded?还是 JSONEncoded? profile 字段是邮递员正文中的字典和 AF 参数中的数组。服务器是否也在告诉您为什么它在响应正文中返回 500? @WarrenBurton 如何在个人资料字段中写入? "profile": [:] @Larme 谢谢它工作正常 【参考方案1】:

parameters.profile 是用数组文字而不是字典定义的。修正以下代码。

let parameters:Parameters = [
    "user_id": "user_id",
    "username":  "username",
    "password": txtPassword.text!,
    "token": "",
    "type_id": 100,
    "country_id": 1,
    "language_id": 1,
    "customer_id": 1,
    "parent_user_id": "",
    "profile": [:]
]

【讨论】:

以上是关于Alamofire httpBody 在 swift 5 中显示 500 statusCode的主要内容,如果未能解决你的问题,请参考以下文章

在 Netfox 和 Moya 中记录 HTTPBody

使用 Alamofire 设置 HTTP Headers 和 HTTP Body

使用 Alamofire 在 HTTP Body 中发送数据

Alamofire:这种语法有啥问题? “通话中的额外参数”

Alamofire 的 Swift 扩展方法返回 SwiftyJSON 结果

在 AFNetworking 中,httpbody 和参数发布请求之间的区别?