【问题标题】:How do you implement a RequestAdapter in Alamofire 5?你如何在 Alamofire 5 中实现 RequestAdapter?
【发布时间】: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 令牌。

【问题讨论】:

    标签: alamofire


    【解决方案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) {
                  //....
              }
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-12-04
            • 2012-09-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多