1

更新问题:

起初我的问题是关于根据ParameterEncoding请求分配一个自定义,我找到了一个解决方案并将字符串添加到然后添加到每个帮助调用的头部,并通过将标题添加到请求中来改变调用方式很好地避免401未经授权的错误。ViewControllerHTTP.MethodAlamofire.requestimport AlamofireViewControllerJSONEncodingURLEncoding

func callingHttpRequest(params:Dictionary<String,Any>, apiname:String,cuurentView:UIViewController,method:HTTPMethod, taskCallback: @escaping (Int,
    AnyObject?) -> Void)  {

    let urlString  = HOST_NAME + apiname

    print("url",urlString)
    print("params", params)
    Alamofire.request(urlString,method: method,parameters:params).validate().responseJSON { response in
        switch response.result {
        case .success(let resultData):
            taskCallback(1,resultData as AnyObject)
            let returnData = String(data: response.data! , encoding: .utf8)
            print("returnData" ,returnData!)
            print("request URL", response.request!)
            break
        case .failure(let error):

             let returnData = String(data: response.data! , encoding: .utf8)
             print("returnData" ,returnData!)
            print("request URL", response.request!)

            if !Connectivity.isConnectedToInternet(){
                NetworkManager.sharedInstance.dismissLoader()
                cuurentView.view.isUserInteractionEnabled = true
                let AC = UIAlertController(title: "Warning", message: error.localizedDescription, preferredStyle: .alert)
                let okBtn = UIAlertAction(title: "Retry", style: .default, handler: {(_ action: UIAlertAction) -> Void in
                    taskCallback(2, "" as AnyObject)
                })
                let noBtn = UIAlertAction(title: "Cancel", style: .destructive, handler: {(_ action: UIAlertAction) -> Void in
                })
                AC.addAction(okBtn)
                AC.addAction(noBtn)
                cuurentView.present(AC, animated: true, completion: { _ in })
            }
            else{
                let errorCode:Int = error._code;
                if errorCode != -999 && errorCode != -1005{
                    NetworkManager.sharedInstance.dismissLoader()
                    cuurentView.view.isUserInteractionEnabled = true
                    let AC = UIAlertController(title: "Warning", message: error.localizedDescription, preferredStyle: .alert)
                    let okBtn = UIAlertAction(title: "Retry", style: .default, handler: {(_ action: UIAlertAction) -> Void in
                        taskCallback(2, "" as AnyObject)
                    })
                    let noBtn = UIAlertAction(title: "Cancel", style: .destructive, handler: {(_ action: UIAlertAction) -> Void in
                    })
                    AC.addAction(okBtn)
                    AC.addAction(noBtn)


                    cuurentView.present(AC, animated: true, completion: { _ in })
               }else if errorCode == -1005{
                   NetworkManager.sharedInstance.dismissLoader()
                   taskCallback(2, "" as AnyObject)
                }

            }
            break;

        }


    }

现在真正让我生气的是请求的响应,该应用程序是通过用户登录创建的,因此每次应用程序运行时它都会检查用户是否登录。发送 HTTP 请求时,如果用户按如下方式登录,则响应返回并SQL Query添加到JSON

失败 returnData string(84) "SELECT * FROM customer where LOWER(user) = 'helloworld' AND status = '1'" {"success":true,"data":[{,,,,,"}

这导致失败响应和错误

警告:由于错误,无法序列化 JSON:无法读取数据,因为它的格式不正确。

这真的很疯狂,为什么响应会返回一段SQL Query时间而不应该返回。在我自定义Alamofire.request.

遇到此类问题的任何方式都可以解决!

PS:响应有 200 OK HTTP 响应但有失败的数据响应

4

0 回答 0