【问题标题】:Append parameters to each network call with Moya使用 Moya 将参数附加到每个网络调用
【发布时间】:2018-11-09 13:03:19
【问题描述】:

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

【问题讨论】:

  • 检查thisthis。他们应该可以帮助您找到自己的方式。

标签: swift alamofire rx-swift moya


【解决方案1】:

Moya 中的Endpoint 类有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)

【讨论】:

  • 谢谢!但这并不能解决附加默认参数的问题。据我所知,该代码仅允许附加 HTTP 标头。
【解决方案2】:
    //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()
      }
    })
  }
}

【讨论】:

    猜你喜欢
    • 2017-12-26
    • 2018-12-05
    • 1970-01-01
    • 1970-01-01
    • 2016-07-11
    • 2018-04-09
    • 2011-09-27
    • 2014-02-20
    • 2020-12-02
    相关资源
    最近更新 更多