【发布时间】:2015-10-08 21:54:38
【问题描述】:
使用 swift 2.0 Xcode 7 和 Alamofire 2.0,我想知道如何使用正确的 HTTPAdditionalHeaders 用法更新代码,在更新到 2.0 之前,此管理器会话配置运行良好,但现在 API 给了我一个错误由于未定义的标头而请求。 ¿ 我该如何解决? ¿是否可以在 ApiClient 中维护 alamoFireManager 会话配置 HTTPAdditionalHeaders?
ApiClient.swift
class ApiClient {
// User token
var oAuthToken = "R0Fh65G4MjCcD18OsiTcPIfHxohFIzFhapuWNFSBhX2conQ1e+3vlv0XrJQVcw7fRg=="
var mainService: MainService
init() {
let alamoFireManager = Manager.sharedInstance
alamoFireManager.session.configuration.HTTPAdditionalHeaders = [
"Authorization": "Bearer \(oAuthToken)"
]
// override the default challenge behavior in Alamofire using the SessionDelegate override closures.
//an example of how you can allow Alamofire to accept invalid certificates:
alamoFireManager.delegate.sessionDidReceiveChallenge = { session, challenge in
var disposition: NSURLSessionAuthChallengeDisposition = .PerformDefaultHandling
var credential: NSURLCredential?
if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust {
disposition = NSURLSessionAuthChallengeDisposition.UseCredential
credential = NSURLCredential(forTrust: challenge.protectionSpace.serverTrust!)
} else {
if challenge.previousFailureCount > 0 {
disposition = .CancelAuthenticationChallenge
} else {
credential = alamoFireManager.session.configuration.URLCredentialStorage?.defaultCredentialForProtectionSpace(challenge.protectionSpace)
if credential != nil {
disposition = .UseCredential
}
}
}
return (disposition, credential)
}
mainService = MainService()
}
}
MainService.swift
struct MainService {
enum Router: URLRequestConvertible {
static let baseURLString = "https://api.test.com/v1"
case GetList([String: AnyObject])
case GetById(String)
var method: Alamofire.Method {
switch self {
case .GetList:
return .GET
case .GetById:
return .GET
case .Add:
return .POST
case .Update:
return .PUT
case .Delete:
return .DELETE
}
}
var path: String {
switch self {
case .GetList:
return "/flyers"
case .GetById(let id):
return "/flyers/\(id)"
case .Add:
return "/flyers"
case .Update(let id, _):
return "/flyers/\(id)"
case .Delete(let id):
return "/flyers/\(id)"
}
}
var URLRequest: NSMutableURLRequest {
let URL = NSURL(string: Router.baseURLString)!
let mutableURLRequest = NSMutableURLRequest(URL: URL.URLByAppendingPathComponent(path))
mutableURLRequest.HTTPMethod = method.rawValue
switch self {
case .GetList(let parameters):
return Alamofire.ParameterEncoding.URL.encode(mutableURLRequest, parameters: parameters).0
case .Add(let parameters):
return Alamofire.ParameterEncoding.JSON.encode(mutableURLRequest, parameters: parameters).0
case .Update(_, let parameters):
return Alamofire.ParameterEncoding.JSON.encode(mutableURLRequest, parameters: parameters).0
default:
return mutableURLRequest
}
}
}
func getList(completionHandler: ([Flyer]?, NSError?) -> ()) {
Alamofire.request(Router.GetList(["skip": Test().getSkip(), "total":Test().getTotal()])).responseJSON { (request, response, result) in
switch result {
case .Success(let data):
let json = JSON("Request success---------------------\(data)")
print(json)
case .Failure(_, let error):
print("Request failed with error: \(error)")
}
}
}
}
结果
Request success---------------------{
code = "BAD_REQUEST";
message = "Bad request";
status = 400;
}
【问题讨论】: