发布方法 HTTPHeader 中的 Alamofire 5.1 更新问题,使用 alamofire 的网络调用

Posted

技术标签:

【中文标题】发布方法 HTTPHeader 中的 Alamofire 5.1 更新问题,使用 alamofire 的网络调用【英文标题】:Alamofire 5.1 update issue in post method HTTPHeader, network call using alamofire 【发布时间】:2020-06-28 10:41:48 【问题描述】:

我正在使用 Api 管理器进行通用网络调用,只需获取 Api 管理器的实例并访问 Api Manger 类中定义的 pos 或 get 函数。 现在我将我的 pod Alamofire 4.7 更新为 Alamofire 5.1。面对问题, 问题是在旧版本 HTTPHeader 类型是 String:String 所以我在控制器中创建了一个字典并传递给函数。但现在我需要添加自定义 HTTPHeader 例如 let header: HTTPHeader = ["abc":"xyz"] 但不可能在每个班级都这样做。

API 管理器功能

        func postRequest (urlString: String!, isAlertShow: Bool, parameters: Parameters, header : HTTPHeaders, successCallback : @escaping (Data) -> Void, errorCallBack : @escaping (String) -> Void) -> Void 
    
    if !Reachability.isConnectedToNetwork() 
        print("Internet Connection not Available!")
        errorCallBack("Internet Connection not Available!")
        return
     else 
        print("Internet Connection Available!")
    
    if isAlertShow 
        SKActivityIndicator.show("Loading...", userInteractionStatus: false)
    
    
    print(header)
    print(urlString!)
    print(parameters)
    Alamofire.request(urlString, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: header).responseJSON response in
        print(response)
        
        SKActivityIndicator.dismiss()
        
        if let JSON = response.result.value as? [String: Any] 
            
            let statusCode = response.response?.statusCode
            
            if statusCode == 200 
                successCallback(response.data!)
             else 
                let errorMsg = JSON["error"]
                if errorMsg != nil 
                    errorCallBack(errorMsg as! String)
                 else 
                    let errotxt = JSON["message"]
                    errorCallBack(errotxt as! String)
                
            
         else 
            errorCallBack(MSG)
        
    

我调用 Api 函数的视图控制器

    var roDictionary = [String:String]()
    var bodyDict = [String:Any]()
    ApiManager.shared.postRequest(urlString: BASE_URL + SUBMIT_RO, isAlertShow: true, parameters: bodyDict, header: roDictionary, successCallback:  (response) in
           // Get response as Data
       , errorCallBack:  (error) in
           print (error)
           self.showAlert(title: ALERT, message: error)
       )

那么现在我如何将字典作为 Alamofire 5.1 的 HTTPHeader 传递,那么这个变化呢 响应.结果.值 请任何人根据我的实现将我的 Api Manger 帖子更改为 Switch。

【问题讨论】:

【参考方案1】:

我认为对于Alamofire 5.x 版本,如果你想为你的HTTPHeaders 添加一个字典,你可以使用他们的init with dictionary 方法。

HTTPHeaders.init(dictionary: [String : String])

在这里你可以传递你的字典。 它还有其他几个初始化器,例如

HTTPHeaders.init(headers: [HTTPHeader])

您可以在其中专门创建一个HTTPHeader 并使用HTTPHeader 数组填充

【讨论】:

以上是关于发布方法 HTTPHeader 中的 Alamofire 5.1 更新问题,使用 alamofire 的网络调用的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 QT WebEngine 发送 HTTPHeader?

如何使用 vba 测试 httpheader 的实例

优雅设计封装基于Okhttp3的网络框架:HttpHeader接口设计实现 及 ResponseRequest封装实现

如何将令牌设置为 Java 中获取请求的 HTTPHeader?

我可以多次使用 CURLOPT_HTTPHEADER 调用 curl_setopt 来设置多个标头吗?

错误:导入 Alamofire