Cloud Function HTTP 请求参数在“&”处拆分

Cloud Function HTTP Request parameter being split up at "&"

我正在尝试进行一个 Firebase 云函数调用,该调用传递一个参数,该参数是特定 url 的字符串表示形式。在大多数情况下,我让我的 Cloud Function 使用 var somePath = req.query.somePath; 获取参数,并使用这些变量执行我想要的所有逻辑。但是,url 包含 ?& 符号,我认为这可能会使 Alamofire 感到困惑,认为 & 之后的数据是它自己传递的参数。

我的尝试

let somePath = "https://www.somewebsite.com/someSubpath?firstID=firstValue&someID=someValue"
let url = "https://us-central1-[myProjectName].cloudfunctions.net/myfunction?somePath=" + somePath + "&someData=" + someData

Alamofire.request(url, method: .post, parameters: nil, encoding: JSONEncoding.default, headers: nil).responseJSON {
  response in
  print("original URL request")
  print(response.request as Any)  // original URL request
  print("URL response")
  print(response.response as Any) // URL response
  print(response.response?.statusCode ?? "response.response?.statusCode is nil")
}

我猜测 somePath 中的 & 导致 someID 被视为另一个参数,所以我的 云函数认为 somePath =

https://www.somewebsite.com/someSubpath?firstID=firstValue

但应该是=

https://www.somewebsite.com/someSubpath?firstID=firstValue&someID=someValue

带着这个猜测,我接着尝试 变化:

Alamofire.request(url, method: .post, parameters: nil, encoding: JSONEncoding.default, headers: nil).responseJSON {

收件人:

Alamofire.request(url, method: .post, parameters: ["somePath": somePath ?? ""], encoding: JSONEncoding.default, headers: nil).responseJSON {

但这只会导致另一个错误,即 somePath 没有作为参数传递。

有谁知道我怎样才能防止 somePath 被拆分,尽管里面有 ?&

如果你想通过查询参数发送数据,你应该使用查询编码而不是像

那样的json
let somePath = "https://www.somewebsite.com/someSubpath?firstID=firstValue&someID=someValue"
    let parameters = ["somePath":somePath,"someData":"someData"]
    let url = "https://us-central1-myProjectName.cloudfunctions.net/myfunction"


    Alamofire.request(url, method: .post, parameters: parameters, encoding: URLEncoding.queryString, headers: nil).responseJSON {
        response in
        Helper.shared.log(for: response)
        print("original URL request")
        print(response.request as Any)  // original URL request
        print("URL response")
        print(response.response as Any) // URL response
        print(response.response?.statusCode ?? "response.response?.statusCode is nil")
    }

Alamofire 将处理所有必需的转义字符。