使用Moya将参数附加到每个网络呼叫

问题描述 投票:0回答:2

如何使用(Rx)Moya将默认请求参数(例如AppID)附加到每个API调用?

swift alamofire rx-swift moya
2个回答
0
投票

Endpoint中的Moya类有adding(newHTTPHeaderFields:),它带有一个字典,在这里你可以提供你的额外http标题,这些标题将在每次请求时发送。文档link

let endpointClosure = { (target: TargetType) -> Endpoint in
    let defaultEndpoint = MoyaProvider.defaultEndpointMapping(for: target)
    return defaultEndpoint.adding(newHTTPHeaderFields: ["AppID": "MY_APP_ID"])
}
let provider = MoyaProvider<TargetType>(endpointClosure: endpointClosure)

0
投票
    //Create a BaseMoyaProvider class and add default paramaters 

    import Moya
    import Result
    import SwiftyJSON

    class BaseMoyaProvider {
      static func create<T: TargetType>(service: T.Type) -> (T)->(Endpoint) {
        let closure = { (target: T) -> Endpoint in
          let endpoint = MoyaProvider.defaultEndpointMapping(for: target)

          switch endpoint.task {
          case .requestParameters(
            let _parameters,
            let _encoding):

            let parameters = _parameters
              .appending([
                "AppID" : "XXXXXXXXXXX"
                ])

            let task = Task.requestParameters(
              parameters: parameters,
              encoding: _encoding
            )

            return endpoint
              .replacing(task: task)
          default: return endpoint
          }`enter code here`
        }
        return closure
      }
    } 

//Extend MoyaProvider class

extension MoyaProvider {
  static func build() -> MoyaProvider<Target> {
    let provider = BaseMoyaProvider
      .create(service: Target.self)

    return MoyaProvider<Target>(
      endpointClosure: provider,
      plugins: [ ApiLogger() ]
    )
  }

  // MARK: Request
  func rx_request<T: Mappable>(_ target: Target) -> Observable<T> {
    return Observable.create({ (observer) -> Disposable in
      let request = self.request(target, completion: { (result) in
        //Handle response
      })
      return Disposables.create {
        request.cancel()
      }
    })
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.