你如何在 Alamofire 5 中实现 RequestAdapter?

Posted

技术标签:

【中文标题】你如何在 Alamofire 5 中实现 RequestAdapter?【英文标题】:How do you implement a RequestAdapter in Alamofire 5? 【发布时间】:2019-01-16 22:29:49 【问题描述】:

在 Alamofire 5 Beta 中,SessionManager 已被 Session 取代。 我想知道现在分配 RequestAdapter 的过程是什么,因为这是 Alamofire 4 中的 var,但在 Alamofire 5 中它现在是 let 常量。因此下面的代码:

var session = Session()
session.adapter = AccessTokenAdapter

引发编译时错误,“无法分配给属性:‘适配器’是‘让’常量”

最终目标是设置自定义头部字段,例如 JWT 令牌。

【问题讨论】:

【参考方案1】:

你应该在你的类中遵守 'RequestInterceptor' 协议,它们有相同的方法:

adaptretry,如 RequestAdapterRequestRetrier

然后你只需将它传递给 request

AF.request(urlRequest, interceptor: RequestInterceptor? = nil)

【讨论】:

【参考方案2】:

这在最新的 Alamofire 中对我有用

func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (AFResult<URLRequest>) -> Void) 
        var modifiedURLRequest = urlRequest
        modifiedURLRequest.setValue("Bearer " + accessToken, forHTTPHeaderField: "Authorization")
        completion(.success(urlRequest))
    

【讨论】:

【参考方案3】:

我的解决方案:

import Foundation
import Alamofire

class AFAuth 

    public static let session : Session = 
        let session = Session(interceptor: AuthRequestInterceptor())
        return session
    ()

    @discardableResult
    public static func request(_ urlRequest: URLRequestConvertible) -> DataRequest 
        return AFAuth.session.request(urlRequest)
    

【讨论】:

【参考方案4】:

详情

Xcode 版本 11.3.1 (11C504) Alamofire 5.0.4

解决方案

class ConnectionService 
    private var session: Session!

    init() 
        let config = Session.default.session.configuration
        session = Session(configuration: config, interceptor: self)
    


extension ConnectionService: RequestInterceptor 

    func adapt(_ urlRequest: URLRequest, for session: Session,
               completion: @escaping (Result<URLRequest, Error>) -> Void) 
        //....
    

【讨论】:

以上是关于你如何在 Alamofire 5 中实现 RequestAdapter?的主要内容,如果未能解决你的问题,请参考以下文章

在 authManger.Login wapper 函数中实现关闭以进行 Alamofire 身份验证?

如何在 laravel 5.1 中实现“记住我”?

您如何使用 Alamofire 测试证书固定?

如何在jpa中实现自动增量

如何使用 Alamofire 等待 API 响应 [重复]

如何使用 Swift 5 在 Xcode 10.2.1 中添加 alamofire