首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Moya更改URL

Moya更改URL
EN

Stack Overflow用户
提问于 2017-05-29 11:59:41
回答 3查看 2.4K关注 0票数 4

我试图使用Google Places调用Moya,但对Moya有问题。Maya更改我的URL中的字符。例如,在这种情况下,在字符?之前添加%3f并为%2C更改,。当我将这个地址复制并粘贴到我的web浏览器中时,我会收到一个错误,但是当我删除%3f和change以及%2C on ,时,我会收到一个正确的答复形式API。如果我不想改变我的url中的字符,我应该在Moya中设置什么?

我的Moya提供者看起来是这样的:

代码语言:javascript
复制
extension GooglePlacesService: TargetType {

var baseURL: URL {
    return URL(string: "https://maps.googleapis.com")!
}

var path: String {
    switch self {
    case .gasStation:
        return "/maps/api/place/nearbysearch/json?"
    }
}

var parameters: [String : Any]? {
    switch self {
    case .gasStation(let lat, let long, let type):
        return ["location": "\(lat),\(long)", "type" : "gas_station", "rankby" : "distance", "keyword" : "\(type)", "key" : GoogleKeys.googlePlacesKey]
    }
}

var parameterEncoding: ParameterEncoding {
    switch self {
    case .gasStation:
        return URLEncoding.queryString
    }
}

var method: Moya.Method {
    switch self {
    case .gasStation:
        return .get
    }
}

var sampleData: Data {
    switch self {
    case .gasStation:
        return "".utf8Encoded
    }
}

var task: Task {
    switch self {
    case .gasStation:
        return .request
    }
  }
}


private extension String {
var urlEscaped: String {
    return self.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)!
}

var utf8Encoded: Data {
    return self.data(using: .utf8)!
  }
}

生成Moya的URL看起来是这样的(不适用于API):

https://maps.googleapis.com/maps/api/place/nearbysearch/json%3F?key=MYAPIKEY&keyword=XXXXXX&location=51.0910166687869%2C17.0157277622482&rankby=distance&type=gas_station

与API一起工作的URL:

https://maps.googleapis.com/maps/api/place/nearbysearch/json?key=MYAPIKEY&keyword=XXXXXX&location=51.0910166687869,17.0157277622482&rankby=distance&type=gas_station

EN

回答 3

Stack Overflow用户

发布于 2018-11-07 12:58:22

我对“?”也有同样的看法。获取转换为“%3F”:

解决方案是不使用复杂的符号(如"?“、”“、”"),将路径放置在URLEncoding.default的Moya安装程序的var Task中:

票数 5
EN

Stack Overflow用户

发布于 2022-06-27 12:04:06

如何在Moya中添加查询参数

MOYA将%3f转换或替换为?标记

使用%3f:-我的URL:-

代码语言:javascript
复制
http://multiseller-dev.azurewebsites.net/api/Support/get-comments/34%3Fpage=1&pageSize=10?page=1&pageSize=10

路径IN

代码语言:javascript
复制
var path: String {
    switch self {
    case .GetComments(let id, let page, let pageSize):
        return "api/Support/get-comments/\(id)"
    }
}

任务中的

代码语言:javascript
复制
var task: Task {
    switch self {
    case .GetComments(let id,let page,let pageSize):
        let post = ["page" : page,
                    "pageSize" : pageSize
        ] as [String : Any]
        return .requestParameters(parameters: post, encoding: URLEncoding.queryString)
    }
}

输出网址:-

代码语言:javascript
复制
http://multiseller-dev.azurewebsites.net/api/Support/get-comments/34?page=1&pageSize=10?page=1&pageSize=10
票数 0
EN

Stack Overflow用户

发布于 2022-09-30 10:25:46

可以编写自定义请求映射,如下所示:

代码语言:javascript
复制
final class func removePercentEncodingRequestMapping(for endpoint: Endpoint, closure: RequestResultClosure) {
        do {
            var urlRequest = try endpoint.urlRequest()
            if let url = urlRequest.url,
                let updatedString = url.absoluteString.removingPercentEncoding {
                urlRequest.url = URL(string: updatedString)
            }
            closure(.success(urlRequest))
        } catch MoyaError.requestMapping(let url) {
            closure(.failure(MoyaError.requestMapping(url)))
        } catch MoyaError.parameterEncoding(let error) {
            closure(.failure(MoyaError.parameterEncoding(error)))
        } catch {
            closure(.failure(MoyaError.underlying(error, nil)))
        }
    }

并通过MoyaProvider初始化程序使用它:

代码语言:javascript
复制
MoyaProvider<YourProvider>(
    requestClosure: MoyaProvider<YourProvider>.removePercentEncodingRequestMapping
)

重点是更新urlRequest.url,它在使用"?“、”“或路径中的其他符号时编码错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44241984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档