2017-05-03 56 views
0

我在我的swift应用程序中使用Moya进行网络请求。获取响应标题与Moya

我能够获取请求并使用Moya- Object Mapper来映射结果。

我以前用过alamofire,我很熟悉如何发表帖子,获取请求并阅读响应头文件。

但是,我似乎无法理解我如何在Moya中做同样的事情。

我确实经历了文档,但没有说任何关于阅读响应标题的内容。

是否有任何示例或教程,我可以按照如何执行HTTP身份验证和读取响应头。以及我如何发布发布请求并将参数作为字段参数或json主体发送。

我已经通过了Moya的例子。

任何帮助将不胜感激。谢谢。

回答

1

Moya的响应头现在其实很难。这是莫亚代码中一种不需要的旧式沮丧。我永远不知道他们为什么贬低它。

我开了一个相关的问题指出来:Moya header

,并做一些改变得益于拉请求:Moya header PR

这是我forcecast应对可以访问我的个人代码的例子到标题:

class GetTokenRequest { 

    private let requestService = AuthorizedRequest() 

    func request() -> Observable<AuthorizedResult<GetTokenEntityResult>> { 
     return Observable.deferred { [weak self] in 
      guard let wself = self else { 
       return Observable.empty() 
      } 

      let req = wself.requestService.makeRawRequest { userId in 
        let obj = GetTokenEntity(lang: currentLanguage(), userId: userId) 
        return MtxAPI.getToken(obj) 
       } 
       .shareReplay(1) 

      return req.map { result in 
       switch result { 
       case .success(let response): 
        let urlResponse = response.response as! HTTPURLResponse 
        guard let token = urlResponse.allHeaderFields["Token"] as? String else { 
         return AuthorizedResult.fail(RequestError.technical) 
        } 
        return AuthorizedResult.success(GetTokenEntityResult(token: token)) 

       case .fail(let error): return AuthorizedResult.fail(error) 
       } 
      } 
     } 
    } 

} 

我使用RxSwift但主线是:

let urlResponse = response.response as! HTTPURLResponse 

你可以在你的地图forcecast它/ MapObject的/ mapArray当你得到的回应你使用(这是一个Moya.Response

我建议你跟着我做的问题,要知道什么时候会实现下一个版本将包含此breaking change

奖励:如果你在项目中使用SwiftLint,您可以用guard/let

guard let resp = response.response as? HTTPURLResponse 
+0

投它,谢谢!我可以在添加后获得响应标头,让urlResponse = response.response为! HTTPURLResponse –