【问题标题】:Alamofire 4.3 with Swift 3 , POST request does not working with URL Parameters带有 Swift 3 的 Alamofire 4.3,POST 请求不适用于 URL 参数
【发布时间】:2017-01-23 09:04:50
【问题描述】:

我正在尝试如下发送一个发布请求,我的路由器如下

enum ProfieRouter: URLRequestConvertible {

case loginUser(parameters: Parameters)
case resetPassword(parametrs: Parameters)

var method: HTTPMethod {

    switch self {

    case .loginUser:
        return .post

    case .resetPassword:
        return .post
    }
}

var path: String {

    switch self {
    case .loginUser:
        return "app/api.php?request=login"

    case .resetPassword:
        return "app/api.php?request=forgettenPassword"
    }
}

func asURLRequest() throws -> URLRequest {
    let BASEURL = "https://www.example.com/"
    let url = try BASEURL.asURL()
    var urlRequest = URLRequest(url: url.appendingPathComponent(path))
    urlRequest.httpMethod = method.rawValue


    switch self {

    case .loginUser(let parameters):
        urlRequest = try URLEncoding.default.encode(urlRequest, with: parameters)

    case .resetPassword(let parameters):
        urlRequest = try URLEncoding.default.encode(urlRequest, with: parameters)
    }
    return urlRequest
}

}

这就是我从 ViewController 中调用它的方式,

@IBAction func signInButtonClicked(_ sender: Any) {

    let parameters: Parameters = [
        "email": "xxxxxx",
        "password": "xxxxxx"
    ]

    Alamofire.request(ProfieRouter.loginUser(parameters: parameters)).responseJSON{ response in


        switch response.result {
        case .success:
            print(response)

            break
        case .failure(let error):

            print(error)
        }

    }

}

但我得到以下错误,

responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=Invalid value around character 0.}))

请注意,当我使用 POSTMAN 和 Advanced REst Client 检查时,我的 API 响应是有效的。我已经尝试了几个关于以下错误的问题,但在我的情况下它们都不起作用。

请有人指出我在这里犯的错误。 谢谢。

【问题讨论】:

  • 当你使用 POSTMAN 时,你是否使用任何 Http Request Header 值?
  • 是的,我将 Content-Type 设置为 application/x-www-form-urlencoded,结果还是一样
  • 您正在尝试使用 .request(url : sample)。而不是使用 Alamofire.request() 其中包含 **_ url:, method: , parameters encoding:, headers:) ** parameters.
  • 我正在尝试使用 Alamofire.request(urlRequest: URLRequestConvertible)。我试过你提到的选项。有效。但我需要在这里应用路由器的概念
  • a) 你能把你用邮递员发的http正文贴出来吗

标签: ios post swift3 alamofire


【解决方案1】:

试试这个..

像这样修改你的网络服务调用代码:

// Add default headers if needed.(As per your web-service requirement)
let headers: HTTPHeaders = [
    "Accept": "text/html",
    "Content-Type" : "application/x-www-form-urlencoded"
]

 Alamofire.request("Your URL", method: .post, parameters: parameters, encoding: URLEncoding.httpBody, headers: headers).validate().responseJSON { (response) in

  debugPrint(response)
}

希望对你有帮助。

【讨论】:

  • 感谢您的时间和精力,但正如我所提到的,我想在这里通过 URLRequestConvertible 应用路由器概念
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-09
  • 2018-05-07
  • 2018-07-27
  • 2020-02-10
  • 1970-01-01
  • 2023-04-07
相关资源
最近更新 更多