我尝试添加自定义标头:
let manager = Manager.sharedInstance
manager.session.configuration.HTTPAdditionalHeaders = [
"Authorization": "Token \(token)"
]
但它不起作用,我做错了什么?
我需要在登录后添加此项,以便在所有请求中使用该标头。
我不知道你在哪里做,但我的AlomoFire请求看起来像:
Alamofire.request(.GET, urlPath, parameters: parameters, headers: ["X-API-KEY": apiKey, "Content-type application":"json", "Accept application" : "json"]).responseJSON() { (req,res, data, error) in //blah blah }
我的猜测是你可以把你的标题信息放到那个标题数组中
一种方法是在Alamofire advanced usage documentation上使用RequestAdapter进行演示。
我厌倦了尝试通过向我的100多个请求添加标题来手动替换整个应用程序。我选择了更懒惰的方法:
制作AlamofireManagerExtension.swift并使用以下代码:
import Foundation
import Alamofire
extension Manager {
public func myRequest(
method: Alamofire.Method,
_ URLString: URLStringConvertible,
parameters: [String: AnyObject]? = nil,
encoding: ParameterEncoding = .URL,
headers: [String: String]? = ["MY-STATIC-API-KEY" : "BLAHBLAHBLAH"])
-> Request
{
return Manager.sharedInstance.request(
method,
URLString,
parameters: parameters,
encoding: encoding,
headers: headers
)
}
}
然后,在你的xcode项目上ctrl-shift-f,搜索sharedInstance.request或你做的任何事情(我的所有代码都遵循这种模式)并用sharedInstance.myRequest替换它(确保不要更改扩展本身的sharedInstance) .request)瞧:
全局更改了所有请求的自定义标头!
如果你想添加自定义键,当然如果你需要,可以使用sharedInstance.request(method:...)等替换方法将方法添加到sharedInstance.myRequest(customKeys:...,method:...)自定义变量。
你不应该以这种方式附加Authorization
标题。应始终使用headers
方法中的request
参数附加它们,如@Glenn所示。
此外,如果需要将其他标头附加到配置,则需要创建自定义配置,设置标头值,然后使用新配置创建新的Manager
实例。在已经用于创建URL会话之后将标头添加到配置会导致未定义的行为,具体取决于您运行的操作系统的版本。我们在Alamofire进行了许多测试,证明了这种不同的行为。