【问题标题】:replacing %3F instead of `?` in url在 url 中替换 %3F 而不是 `?`
【发布时间】:2018-02-01 18:35:13
【问题描述】:

当我想在请求中调用此方法时,我遇到了这个问题。它似乎正在替换 %3f 而不是 swift4 中的 ?

它是我的 ApiRouter

struct ApiRouter {
enum Router: URLRequestConvertible {

   case getAllPlcae(id: Int, paseSize: Int, pageNumber: Int, countryID: Int, cityID: Int)

    var method: Alamofire.HTTPMethod {
        switch self {

       case .getAllPlcae:
            return .get

        }
    }

    func asURLRequest() throws -> URLRequest {
        let result: (path: String, parameters: [String: AnyObject]?) = {
            switch self {

            case .getAllPlcae(let id, let pageSize, let pageNumber, let countryID, let cityID):
                return("Location?textToSearch=&tagIds=&id=\(id)&pageSize=\(pageSize)&pageNumber=\(pageNumber)&countryID=\(countryID)&cityID=\(cityID)",nil)

            }
        }()


        // MARK: - Set HTTP Header Field
        let url = URL(string: Constants.ApiConstants.baseURLString)!
        var urlRequest = URLRequest(url: url.appendingPathComponent(result.path))
        urlRequest.httpMethod = method.rawValue
        if let token = User.getToken() {
            urlRequest.setValue(token, forHTTPHeaderField: "Authorization")
        }
        let encoding = try Alamofire.URLEncoding.default.encode(urlRequest, with: result.parameters)

        return encoding
    }
}}

当我调用这个请求时,就像 down 一样

Alamofire.request(ApiRouter.Router.getAllPlcae(id: 0, paseSize: 10, pageNumber: 1, countryID: 0, cityID: 0)).responseArray { (response: DataResponse<[Place]>) in }

这是我的网址请求

Location%3FtextToSearch=&tagIds=&id=0&pageSize=10&pageNumber=1&countryID=0&cityID=0

它似乎正在替换 %3f 而不是 ?

如何解决?

【问题讨论】:

  • 您不应该将查询参数作为路径的一部分,您应该返回一个包含参数的字典作为该元组中的第二个值。
  • @dan 怎么样?你能给我一个示例代码吗?
  • 你需要创建你的url字符串并设置URLEncoding如stackoverflow.com/a/51894621/3110023
  • 您需要通过parameters 字典传递查询字符串KVs,而不是尝试手动将其破解到路径中。

标签: string replace request alamofire swift4


【解决方案1】:

带有url参数的帖子

https://github.com/Moya/Moya/issues/1030#issuecomment-646910369

public var task: Task {
...    
return .uploadCompositeMultipart(multipartData, urlParameters: ["key":"value"])
}

【讨论】:

    【解决方案2】:

    我找到了这个问题的解决方案。我们应该删除百分比编码。

            // MARK: - Set HTTP Header Field
            let base = URL(string: Constants.ApiConstants.baseURLString)!
            let baseAppend = base.appendingPathComponent(result.path).absoluteString.removingPercentEncoding
            let url = URL(string: baseAppend!)
            var urlRequest = URLRequest(url: url!)
            urlRequest.httpMethod = method.rawValue
            if let token = User.getToken() {
                urlRequest.setValue(token, forHTTPHeaderField: "Authorization")
            }
            let encoding = try Alamofire.URLEncoding.default.encode(urlRequest, with: result.parameters)
    
            return encoding
    

    【讨论】:

      猜你喜欢
      • 2016-07-24
      • 2019-02-27
      • 1970-01-01
      • 2021-05-04
      • 1970-01-01
      • 2013-10-11
      • 1970-01-01
      • 2013-02-10
      • 2018-07-20
      相关资源
      最近更新 更多