Alamofire POST错误令牌 - Swift

时间:2018-01-31 15:35:26

标签: ios swift api post alamofire

我的公司和我正在开发一个iOS项目,我们在这个问题上陷入困境。我们正在尝试向我们的API发出POST请求,但我们得到的只是一个成功代码,但有一个类型的响应:

  

成功:{       detail =“未提供身份验证凭据。”;   }

这是我们的代码:

@IBAction func accept(_ sender: Any) {
    var comm,cat,dist : String!
    comm = observationstwee.text!
    print(comm)
    let catd = 7
    cat = String(catd)
    print(cat)
    dist = distancetwee.text!
    print(dist)
    let parameters: Parameters = [
        "comment":comm,
        "category":cat,
        "distance":dist,
        "timestamp":time
    ]
    let headers: HTTPHeaders = ["Authorization": "Token \(token!)"]
    print(headers.debugDescription)
    Alamofire.request("https://llegoelbigotes.ubiqme.es/api/new-travel",parameters: parameters, headers: headers).responseJSON {response in switch(response.result) {

    case .success(_):
        print(response)
        print("Correct Travel")
        //changeViewController(storyboard_name: "Main", viewcontroller_name: "tabBarController", context: self)
        break

    case .failure(_):
        print("FAILURE")
        }
    }
}

感谢您帮助我们使用Alamofire 4.5和iOS 11.2

2 个答案:

答案 0 :(得分:0)

1)您正在发送GET请求。我没有在Alamofire中看到调用指定的另一种方法,而AFAIK,默认是GET。

2)在responseJSON之前使用链验证()方法,因此您的请求调用将如下所示:

Alamofire.request("https://llegoelbigotes.ubiqme.es/api/new-travel", method: .post, parameters: parameters, headers: headers).validate().responseJSON { ...

此问题的另一个可能的解决方法是使用其他编码。在致电alamofire设置encoding: URLEncoding(destination: .httpBody)

请查看this以获取更多信息。

答案 1 :(得分:0)

我想这会奏效。

let url = "https://llegoelbigotes.ubiqme.es/api/new-travel"

Alamofire.request(
        url,
        method: .post,
        parameters: parameters,
        encoding: JSONEncoding.default,
        headers: headers). validate().responseJSON{ response in 
        switch(response.result) {

        case .success(_):
            print(response.response)
            print("Correct Travel")
           //changeViewController(storyboard_name: "Main", viewcontroller_name: "tabBarController", context: self)
           break

        case .failure(_):
        print("FAILURE")
     }
 }

如果没有,请尝试检查 HTTPHeaders

类型的标题变量
let headers: HTTPHeaders = ["Authorization": "Token \(token!)"]

在这里,您将使用您的令牌字符串附加令牌。说你的令牌是 XXXX 然后它变成 TokenXXXX 。尝试使用它

let headers: HTTPHeaders = ["Authorization": " \(token!)"]

然后检查。