【发布时间】:2015-09-24 09:36:41
【问题描述】:
我尝试添加自定义标题:
let manager = Manager.sharedInstance
manager.session.configuration.HTTPAdditionalHeaders = [
"Authorization": "Token \(token)"
]
但它不起作用,我做错了什么?
我需要在登录后添加这个,以便在所有请求中使用该标头。
【问题讨论】:
我尝试添加自定义标题:
let manager = Manager.sharedInstance
manager.session.configuration.HTTPAdditionalHeaders = [
"Authorization": "Token \(token)"
]
但它不起作用,我做错了什么?
我需要在登录后添加这个,以便在所有请求中使用该标头。
【问题讨论】:
一种方法是使用 Alamofire advanced usage documentation 上演示的 RequestAdapter。
【讨论】:
我不知道你在哪里做的,但我的 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 }
我的猜测是您可以将标题信息放入该标题数组中
【讨论】:
我厌倦了尝试通过向 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 标头。它们应该始终使用request 方法中的headers 参数附加,如@Glenn 所示。
此外,如果您需要将其他标头附加到配置中,则需要创建自定义配置,设置标头值,然后使用新配置创建一个新的 Manager 实例。在配置已用于创建 URL 会话之后将标头添加到配置会导致未定义的行为,具体取决于您运行的操作系统的版本。我们在 Alamofire 中进行了许多测试,证明了这种不同的行为。
【讨论】: