2017-05-03 94 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 –