在Alamofire的请求适配器中添加GET参数

问题描述 投票:0回答:2

我正在尝试在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 的最佳方法是什么?

ios swift alamofire
2个回答
7
投票

你可以尝试吗

let params: Parameters = ["session": sessionToken]
return URLEncoding.default.encode(urlRequest, with: params)

(或)

return URLEncoding.queryString.encode(urlRequest, with: params)

谢谢 斯里拉姆


0
投票

上述解决方案对我不起作用,我想是因为我的请求方法是发布的。以下是在重试发布请求时寻找更新或删除参数的示例。

使用 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))
}
© www.soinside.com 2019 - 2024. All rights reserved.