Ios 阿拉莫菲尔4 Swift 3参数编码自定义

Ios 阿拉莫菲尔4 Swift 3参数编码自定义,ios,alamofire,swift3,Ios,Alamofire,Swift3,我将我的项目更新为Swift 3和Alamofire 4。我使用的是自定义编码,但改为其他编码方法。我无法找到替代方案/等效方案: alamoFire.request(urlString, method: HTTPMethod.post, parameters: [:], encoding: .Custom({ (convertible, params) in let mutableRequest = convertible.URLRequest.copy()

我将我的项目更新为Swift 3和Alamofire 4。我使用的是自定义编码,但改为其他编码方法。我无法找到替代方案/等效方案:

alamoFire.request(urlString, method: HTTPMethod.post, parameters: [:], encoding: .Custom({
        (convertible, params) in

        let mutableRequest = convertible.URLRequest.copy() as! NSMutableURLRequest
        let data = (body as NSString).data(using: String.Encoding.utf8)
        mutableRequest.httpBody = data
        return (mutableRequest, nil)

    }), headers: headers()).responseJSON { (responseObject) -> Void in

        switch responseObject.result {
        case .success(let JSON):
            success(responseObject: JSON)

        case .failure(let error):
            failure(error: responseObject)
        }
    }
我还尝试创建URLRequest对象和简单请求,它也会给我带来错误

var request = URLRequest(url: URL(string: urlString)!)
    let data = (body as NSString).data(using: String.Encoding.utf8.rawValue)
    request.httpBody = data
    request.httpMethod = "POST"
    request.allHTTPHeaderFields = headers()

    alamoFire.request(request).responseJSON { (responseObject) -> Void in

        switch responseObject.result {
        case .success(let JSON):
            success(JSON)

        case .failure(let error):
            failure(responseObject, error)
        }
    }

请向我指出一些方向,如何将httpbody与Alamofire 4连接在一起。在Alamofire 4.0中,您应该使用
参数编码
协议。下面是一个示例,它使任何
字符串
UTF8
都可编码

extension String: ParameterEncoding {

    public func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest {
        var request = try urlRequest.asURLRequest()
        request.httpBody = data(using: .utf8, allowLossyConversion: false)
        return request
    }

}

Alamofire.request("http://mywebsite.com/post-request", method: .post, parameters: [:], encoding: "myBody", headers: [:])
试试这个方法

Alamofire.request(url, method: HTTPMethod.post, parameters: parameters, encoding: URLEncoding.httpBody, headers: nil).responseObject(completionHandler: { (response : DataResponse<T>)  in

})
Alamofire.request(url,方法:HTTPMethod.post,参数:parameters,编码:URLEncoding.httpBody,头:nil)。中的responseObject(completionHandler:{(response:DataResponse)
})

你身体里有什么?您确定它转换为字符串吗?你想怎么寄?作为JSON?或者仅仅作为一个字符串?@alvinvaghese Raw dataenconding:“myBody”与本例中的任何其他代码有何关联?这个答案是不完整的,尽管被接受。“myBody”只是一个示例字符串,它表示您的请求的主体。默认情况下,您不能将
字符串
用作
编码
参数,但在我的示例中,借助
扩展名
可以。应该有一种比扩展String类更优雅的原始编码方式,感谢您的快速响应。这应该是公认的答案,因为不需要自定义实现
参数编码