7
votes

Comment implémentez-vous un RequestAdapter dans Alamofire 5?

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.


0 commentaires

4 Réponses :


1
votes

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))
    }


0 commentaires

2
votes

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)


0 commentaires

0
votes

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)
    }
}


0 commentaires

0
votes

Détails
  • Version 11.3.1 de Xcode (11C504)
  • Alamofire 5.0.4

Solution

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) {
        //....
    }
}

0 commentaires