Dans la version bêta d'Alamofire 5, SessionManager a été remplacé par Session .
Je me demande quelle est la procédure actuelle pour attribuer un RequestAdapter, car il s'agissait d'un var dans Alamofire 4, mais dans Alamofire 5, c'est maintenant une constante let . D'où le code suivant:
var session = Session() session.adapter = AccessTokenAdapter
renvoie une erreur de compilation, "Impossible d'affecter à la propriété: 'adapter' est une constante 'let'"
Le but final est pour définir des champs d'en-tête personnalisés tels que le jeton JWT.
4 Réponses :
Cela fonctionne pour moi dans la dernière version d'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))
}
Vous devez vous conformer au protocole " RequestInterceptor " de votre classe, qui a des méthodes identiques:
adapter et réessayer comme dans RequestAdapter et RequestRetrier.
Ensuite, il vous suffit de le transmettre à request
AF.request(urlRequest, interceptor: RequestInterceptor? = nil)
Ma solution:
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)
}
}
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) {
//....
}
}