我有一个小的片段,它向登录端点发出请求并且工作正常。
public func loginWithEmail(email: String, password: String, completionHandler: Result<String, NSError> -> Void) {
Alamofire.request(AuthenticationRouter.Login(email: email, password: password))
.validate()
.responseString { response in
completionHandler(response.result)
}
}
我的问题是:当用户输入无效凭证时,服务器返回403,由于validate
将生成Result<NSError>
。在此错误中修改错误描述/失败原因的最佳方法是什么?
我应该创建自己的错误吗?有没有办法为所有请求修改它?
Alamofire验证func片段以供参考:
public func validate<S: SequenceType where S.Generator.Element == Int>(statusCode acceptableStatusCode: S) -> Self {
return validate { _, response in
if acceptableStatusCode.contains(response.statusCode) {
return .Success
} else {
let failureReason = "Response status code was unacceptable: \(response.statusCode)"
return .Failure(Error.errorWithCode(.StatusCodeValidationFailed, failureReason: failureReason))
}
}
}
答案 0 :(得分:3)
最简单的方法是在错误到达您的应用代码后采取行动。您可能不想创建一个自定义validate
方法来覆盖默认的Alamofire行为,因为您的案例非常具体。
通常,您可以设置可接受的状态代码并使用validate(statusCodes:)
方法。然后,在应用代码的response
逻辑中,启用错误并为每个案例创建自定义应用代表。在这种情况下,403表示使用了只有您的应用程序知道的错误凭据。因此,它应该存在于您的应用代码中,而不是Alamofire validation
扩展中。我的两分钱......