参数不带名称的Alamofire错误请求



我在尝试将参数编码到请求url时出错。

以下是我获取请求url的函数:

func asURLRequest() throws -> URLRequest {
let url = try baseURL.asURL().appendingPathComponent(path)
var request = URLRequest(url: url)
request.method = method
if method == .get {
request = try URLEncodedFormParameterEncoder().encode(parameters, into: request)
} else if method == .post {
request = try JSONParameterEncoder().encode(parameters, into: request)
request.setValue("application/json", forHTTPHeaderField: "Accept")
}
return request
}

当参数是像["id":1]这样的字典时,它就起作用了。url为:http://.../api/v1/items/?id=1

我只想传递参数1,所以url应该是这样的:http://.../api/v1/items/1

但它不起作用,我从Alamofire:得到这个错误

requestRetryFailed(retryError:Alamofire.AFError.requestRetryFailed(retryError:Alamofire.AFError。parameterEncoderFailed(原因:Alamofire.AFError.ParameterEncoderFailureReason。encoderFailed(错误:Alamofire.URLEncodedFormEncoder.Error.invalidRootObject("string("1"("((

您想要的是路径编码,而不是查询编码或表单编码。Alamofire中没有针对路径组件的特定参数编码器(尽管有一个正在进行的功能请求(。通常人们会直接将它们编码到路径中,因此您可以通过使用路由器并让每条路由编码自己的参数来直接修改代码。

func encodeParameters(into request: URLRequest) throws -> URLRequest {
switch self {
case .someRoute(parameters):
return try URLEncodedFormParameterEncoder().encode(parameters, into: request)
case .pathParameterRoute(parameter):
var request = request
request.url?.appendPathComponent(parameter)
return request
}
}

最新更新