【问题标题】:Swift Alamofire add custom header to all requestsSwift Alamofire 向所有请求添加自定义标头
【发布时间】:2015-09-24 09:36:41
【问题描述】:

我尝试添加自定义标题:

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

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

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

【问题讨论】:

    标签: swift header alamofire


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      我的猜测是您可以将标题信息放入该标题数组中

      【讨论】:

      • 它只为一个请求设置标头,但 Mirza Delic 询问如何为所有请求设置自定义标头
      • @Glenn 标头信息到该标头数组或字典中
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-03-07
          • 1970-01-01
          • 2012-11-15
          • 1970-01-01
          • 1970-01-01
          • 2017-11-06
          • 2013-11-13
          • 1970-01-01
          相关资源
          最近更新 更多