我有一个路由器,其中包含以下行:
var url = URL(string: MyRouter.baseURLString)!
url.appendPathComponent(relativePath)
这将"?"替换为"%3F",但被API服务器拒绝。我该怎么办?将这个字符进行编码是错误的。
我有一个路由器,其中包含以下行:
var url = URL(string: MyRouter.baseURLString)!
url.appendPathComponent(relativePath)
这将"?"替换为"%3F",但被API服务器拒绝。我该怎么办?将这个字符进行编码是错误的。
因为 ?
不是路径的一部分,而是一个分隔符,用于标识查询字符串的开始。您可以在 这篇文章 中了解 URL 的不同组成部分。每个组件都有其一组有效字符,任何不在此集合中的字符都需要进行百分号编码转义。最好的选择是使用 URLComponents
,它会自动处理转义:
var urlComponents = URLComponents(string: MyRouter.baseURLString)!
urlComponents.queryItems = [
URLQueryItem(name: "username", value: "jsmith"),
URLQueryItem(name: "password", value: "password")
]
let url = urlComponents.url!
https://example.com?name=value
,可以尝试使用URLComponents
或仅使用字符串连接。 - OOPer