带有 Swift 3 的 Alamofire 4.3,POST 请求不适用于 URL 参数
Posted
技术标签:
【中文标题】带有 Swift 3 的 Alamofire 4.3,POST 请求不适用于 URL 参数【英文标题】:Alamofire 4.3 with Swift 3 , POST request does not working with URL Parameters 【发布时间】:2017-01-23 09:04:50 【问题描述】:我正在尝试如下发送一个发布请求,我的路由器如下
enum ProfieRouter: URLRequestConvertible
case loginUser(parameters: Parameters)
case resetPassword(parametrs: Parameters)
var method: HTTPMethod
switch self
case .loginUser:
return .post
case .resetPassword:
return .post
var path: String
switch self
case .loginUser:
return "app/api.php?request=login"
case .resetPassword:
return "app/api.php?request=forgettenPassword"
func asURLRequest() throws -> URLRequest
let BASEURL = "https://www.example.com/"
let url = try BASEURL.asURL()
var urlRequest = URLRequest(url: url.appendingPathComponent(path))
urlRequest.httpMethod = method.rawValue
switch self
case .loginUser(let parameters):
urlRequest = try URLEncoding.default.encode(urlRequest, with: parameters)
case .resetPassword(let parameters):
urlRequest = try URLEncoding.default.encode(urlRequest, with: parameters)
return urlRequest
这就是我从 ViewController 中调用它的方式,
@IBAction func signInButtonClicked(_ sender: Any)
let parameters: Parameters = [
"email": "xxxxxx",
"password": "xxxxxx"
]
Alamofire.request(ProfieRouter.loginUser(parameters: parameters)).responseJSON response in
switch response.result
case .success:
print(response)
break
case .failure(let error):
print(error)
但我得到以下错误,
responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo=NSDebugDescription=Invalid value around character 0.))
请注意,当我使用 POSTMAN 和 Advanced REst Client 检查时,我的 API 响应是有效的。我已经尝试了几个关于以下错误的问题,但在我的情况下它们都不起作用。
请有人指出我在这里犯的错误。 谢谢。
【问题讨论】:
当你使用 POSTMAN 时,你是否使用任何 Http Request Header 值? 是的,我将 Content-Type 设置为 application/x-www-form-urlencoded,结果还是一样 您正在尝试使用 .request(url : sample)。而不是使用 Alamofire.request() 其中包含 **_ url:, method: , parameters encoding:, headers:) ** parameters. 我正在尝试使用 Alamofire.request(urlRequest: URLRequestConvertible)。我试过你提到的选项。有效。但我需要在这里应用路由器的概念 a) 你能把你用邮递员发的http正文贴出来吗 【参考方案1】:试试这个..
像这样修改你的网络服务调用代码:
// Add default headers if needed.(As per your web-service requirement)
let headers: HTTPHeaders = [
"Accept": "text/html",
"Content-Type" : "application/x-www-form-urlencoded"
]
Alamofire.request("Your URL", method: .post, parameters: parameters, encoding: URLEncoding.httpBody, headers: headers).validate().responseJSON (response) in
debugPrint(response)
希望对你有帮助。
【讨论】:
感谢您的时间和精力,但正如我所提到的,我想在这里通过 URLRequestConvertible 应用路由器概念以上是关于带有 Swift 3 的 Alamofire 4.3,POST 请求不适用于 URL 参数的主要内容,如果未能解决你的问题,请参考以下文章
带有 XML 响应和正文的 SOAP 请求 swift 3,Alamofire
Swift 3 的 ObjectMapper 和 Alamofire 问题 Alamofire 4 的 Alamofire 版本
在 Swift 3.0 (Alamofire 4.4.0) 中的一些请求后,Alamofire 停止工作
使用 Alamofire 4 (Swift 3) 下载文件的路径