你如何在 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' 协议,它们有相同的方法:
adapt 和 retry,如 RequestAdapter 和 RequestRetrier。
然后你只需将它传递给 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?的主要内容,如果未能解决你的问题,请参考以下文章