我正在尝试在Alamofire的请求适配器中添加 GET 参数。但是在请求适配器中我只能添加 HTTPHeader 字段。
目前我的
request adapter
看起来像:
// MARK: - RequestAdapter
func adapt(_ urlRequest: URLRequest) throws -> URLRequest {
if let url = urlRequest.url, url.lastPathComponent.hasPrefix(baseURLString) {
var urlRequest = urlRequest
// Want to inject param here
// e.g. urlRequest.addParam(param: "session", value: sessionToken")
return urlRequest
}
return urlRequest
}
我为路径配置了路由器,但由于我希望我的 AuthHandler 负责所有与身份验证相关的内容,所以我想注入我的 sessionToken。这与
RequestRetrier
一起确保任何与 HTTP 401 相关的错误都得到处理。
更改 urlRequest 的最佳方法是什么?
你可以尝试吗
let params: Parameters = ["session": sessionToken]
return URLEncoding.default.encode(urlRequest, with: params)
(或)
return URLEncoding.queryString.encode(urlRequest, with: params)
谢谢 斯里拉姆
上述解决方案对我不起作用,我想是因为我的请求方法是发布的。以下是在重试发布请求时寻找更新或删除参数的示例。
使用 Alamofire v5.9.1、iOS 12 ~ 17、Swift 5 进行测试
func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result<URLRequest, Error>) -> Void) {
// get mutable copy
var adaptedRequest = urlRequest
// Convert body into string then update params
if let httpBody = adaptedRequest.httpBody,
let bodyString = String(data: httpBody, encoding: .utf8) {
// Parse body params into dictionary
var parameters = [String: String]()
bodyString.split(separator: "&").forEach { pair in
let keyValue = pair.split(separator: "=")
if keyValue.count == 2 {
parameters[String(keyValue[0])] = String(keyValue[1])
}
}
// Update your params here
parameters["key"] = "value"
parameters["another_key"] = "another_value"
// Convert back to httpBody
let updatedBody = parameters.map { "\($0.key)=\($0.value)" }.joined(separator: "&")
adaptedRequest.httpBody = updatedBody.data(using: .utf8)
}
// Return the adapted request
completion(.success(adaptedRequest))
}