【发布时间】: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正文贴出来吗