在每个 Alamofire 请求之前/之后调用一个函数
Posted
技术标签:
【中文标题】在每个 Alamofire 请求之前/之后调用一个函数【英文标题】:Call a function before/after each Alamofire request 【发布时间】:2016-08-24 12:35:17 【问题描述】:我想知道是否有使用 Alamofire 和 ios 实现类似于中间件的东西。
我有大量非常相似的 API 调用,它们都需要有效的 json Web 令牌进行身份验证。我想在每次 API 调用之前执行相同的验证,或者在任何 API 调用失败时交替采取相同的纠正措施。有没有一种方法可以配置它,这样我就不必将相同的代码块复制并粘贴到所有 API 调用的开头或结尾?
【问题讨论】:
围绕你调用的 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)
【讨论】:
以上是关于在每个 Alamofire 请求之前/之后调用一个函数的主要内容,如果未能解决你的问题,请参考以下文章