【问题标题】:Call a function before/after each Alamofire request在每个 Alamofire 请求之前/之后调用一个函数
【发布时间】:2016-08-24 12:35:17
【问题描述】:

我想知道是否有使用 Alamofire 和 iOS 实现类似于中间件的东西。

我有大量非常相似的 API 调用,它们都需要有效的 json Web 令牌进行身份验证。我想在每次 API 调用之前执行相同的验证,或者在任何 API 调用失败时交替采取相同的纠正措施。有没有一种方法可以配置它,这样我就不必将相同的代码块复制并粘贴到所有 API 调用的开头或结尾?

【问题讨论】:

  • 围绕你调用的 Alamofire 方法创建一个包装器?

标签: ios swift alamofire


【解决方案1】:

包装类

您可以为您的请求创建一个包装器。

class AlamofireWrapper {
    static func request(/*all the params you need*/) {
        if tokenIsValidated() { //perform your web token validation
            Alamofire.request//...
            .respone { /*whatever you want to do with the response*/ }
        }
    }
}

您可以像这样使用它,而不必再次复制和粘贴相同的代码。

AlamofireWrapper().request(/*params*/)

扩展

这未经测试。您可以为 Alamofire 添加扩展

extension Alamofire {
    func validatedRequest(/*all the params you need*/) {
        if tokenIsValidated() { //perform your web token validation
            Alamofire.request//...
            .respone { /*whatever you want to do with the response*/ }
        }
    }
}

并像这样使用它

Alamofire.validatedRequest(/*params*/)

【讨论】:

    【解决方案2】:

    如果您尝试将公共标头附加到所有调用,您可以使用Alamofire.manager 进行设置。所有Alamofire.request 使用Alamofire.manager 的公共共享实例

    var defaultHeaders = Alamofire.Manager.sharedInstance.session.configuration.HTTPAdditionalHeaders ?? [:]
    defaultHeaders["Accept-Language"] = "zh-Hans"
    
    let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
    configuration.HTTPAdditionalHeaders = defaultHeaders
    
    let manager = Alamofire.Manager(configuration: configuration)
    

    对于身份验证令牌,我在执行我所有请求的网络类中这样做。

    func authHeaders() -> [String: String] {
        let headers = [
            "Authorization": "Token \(UserManager.sharedInstance.token)",
        ]
    }
    Alamofire.request(.GET, "https://myapi/user", headers: authHeaders())
         .responseJSON { response in
             debugPrint(response)
         }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-12
      • 2019-09-14
      • 1970-01-01
      • 2016-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多