Swift Alamofire为所有请求添加自定义标头

问题描述 投票:6回答:4

我尝试添加自定义标头:

let manager = Manager.sharedInstance
manager.session.configuration.HTTPAdditionalHeaders = [
    "Authorization": "Token \(token)"
]

但它不起作用,我做错了什么?

我需要在登录后添加此项,以便在所有请求中使用该标头。

swift header alamofire
4个回答
3
投票

我不知道你在哪里做,但我的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 }

我的猜测是你可以把你的标题信息放到那个标题数组中


3
投票

一种方法是在Alamofire advanced usage documentation上使用RequestAdapter进行演示。


2
投票

我厌倦了尝试通过向我的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:...)自定义变量。


1
投票

你不应该以这种方式附加Authorization标题。应始终使用headers方法中的request参数附加它们,如@Glenn所示。

此外,如果需要将其他标头附加到配置,则需要创建自定义配置,设置标头值,然后使用新配置创建新的Manager实例。在已经用于创建URL会话之后将标头添加到配置会导致未定义的行为,具体取决于您运行的操作系统的版本。我们在Alamofire进行了许多测试,证明了这种不同的行为。

© www.soinside.com 2019 - 2024. All rights reserved.