Swift 4 + Alamofire使用字典作为参数无法发送POST请求
Hey there, let's fix your POST request issue step by step—there are two key problems in your code that are causing the failure:
1. 语法错误导致编译失败
First, your parameters dictionary has typos with extra closing parentheses. Look at these problematic lines:
"source": sourceLanguage), // 多了一个多余的 `)` "target": target)] // 多了一个多余的 `)`
This will prevent your code from even compiling, let alone sending a request. Correct the parameters definition first.
2. 参数编码与请求头不匹配
You've set the Content-type header to application/json, but Alamofire uses URLEncoding as the default parameter encoding. This means your parameters will be encoded as form data (like key=MY_KEY&q=text...) instead of JSON, which the server won't recognize when expecting a JSON payload. You need to explicitly specify JSONEncoding.default for the encoding.
修正后的完整代码
// 修正语法错误的参数字典 let parameters: [String: String] = [ "key": "MY_KEY", "q": sourceText, "source": sourceLanguage, "target": target ] let headers: HTTPHeaders = ["Content-type": "application/json"] // 显式指定JSON编码发送请求 Alamofire.request(urlString, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers) .responseJSON { response in // 更详细的错误处理,方便调试 guard let error = response.result.error else { // 请求成功,处理返回数据 if let responseData = response.result.value { print("请求成功,返回数据: \(responseData)") } return } // 打印具体错误信息,而非泛泛的"error..." print("请求失败: \(error.localizedDescription)") // 还可以查看服务器返回的状态码和响应内容 if let statusCode = response.response?.statusCode { print("状态码: \(statusCode)") } }
额外调试建议
- Always print the full error details instead of just "error..."—this will tell you if it's a network issue, server error, or payload parsing problem.
- Check the API documentation again to confirm if it expects JSON payload or form data. If it expects form data, remove the
Content-type: application/jsonheader and use Alamofire's default encoding.
内容的提问来源于stack exchange,提问作者Dong Manh

