在Alamofire 5 Beta中,SessionManager
已替换为Session
。
我想知道现在分配RequestAdapter的过程是什么,因为在Alamofire 4中这是一个var
,但是在Alamofire 5中它现在是一个let
常量。因此,下面的代码:
var session = Session()
session.adapter = AccessTokenAdapter
引发编译时错误,“无法分配给属性:'adapter'是'let'常量”
最终目标是设置自定义标头字段,例如JWT令牌。
答案 0 :(得分:1)
这在最新的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))
}
答案 1 :(得分:0)
您应遵循类中的“ RequestInterceptor ”协议,该协议具有相同的方法:
adapt 和重试,如 RequestAdapter 和 RequestRetrier 一样。
然后您将其传递给请求:
AF.request(urlRequest, interceptor: RequestInterceptor? = nil)
答案 2 :(得分:0)
我的解决方案:
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)
}
}
答案 3 :(得分:0)
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) {
//....
}
}