如何防止alamofire将“&”符号放在参数前面
Posted
技术标签:
【中文标题】如何防止alamofire将“&”符号放在参数前面【英文标题】:How to prevent alamofire to put "&" sign to front of parameter 【发布时间】:2018-08-03 14:57:50 【问题描述】:我是 Swift 的初学者。我正在尝试使用 PUBG api 创建一个应用程序。我使用 Alamofire 添加我的标题。我的故事板上有一个文本字段,我在那里输入我的昵称并从 pubg api 获取数据。我的问题是 Alamofire 在参数前面添加了“&”符号,所以这会使 url 崩溃。如何防止 Alamofire 将“&”符号添加到参数中?
let playerURL = "https://api.pubg.com/shards/pc-eu/players?filter[playerNames]"
func findPlayer(playerName:String)
let httpParameters : Parameters = ["":playerName]
Alamofire.request(playerURL,method:.get,parameters:httpParameters,encoding:URLEncoding.default,headers:httpHeaders).responseJSONresponse in switch response.result
case .success(let value):
let response = JSON(value)
print(response["data"])
case .failure(_):
return
网址应该是这样的:
https://api.pubg.com/shards/pc-eu/players?filter%5BplayerNames%5D=PlayerName
反而变成了这样:
https://api.pubg.com/shards/pc-eu/players?filter%5BplayerNames%5D&=PlayerName
【问题讨论】:
【参考方案1】:如果你使用 Alamofire 对参数进行编码,那么你需要让它对参数进行编码:
let playerURL = "https://api.pubg.com/shards/pc-eu/players"
....
let httpParameters : Parameters = ["filter[playerNames]": playerName]
...
我的整个测试用例如下:
创建一个空白的单视图项目在 AppDelegate 中添加:
let playerURL = "https://api.pubg.com/shards/pc-eu/players"
func findPlayer(playerName:String)
let httpParameters : Parameters = ["filter[playerNames]": playerName]
let request = Alamofire.request(playerURL,
method:.get,
parameters:httpParameters)
print(request)
在application(_:didFinishLaunchingWithOptions:)
中添加:
findPlayer(playerName: "PLAYERNAME")
运行
输出:
GET https://api.pubg.com/shards/pc-eu/players?filter%5BplayerNames%5D=PLAYERNAME
【讨论】:
试过了。它仍然把 & 放在他们前面。 我无法复制这个;请发布您用来证明这一点的代码。我的代码产生:https://api.pubg.com/shards/pc-eu/players?filter%5BplayerNames%5D=PLAYERNAME
好吧,不知何故我得到的链接现在我不知道为什么。也感谢您的回复。以上是关于如何防止alamofire将“&”符号放在参数前面的主要内容,如果未能解决你的问题,请参考以下文章
如何防止“没有这样的模块'Alamofire'”作为Xcode中的错误?
Swift 3 使用 Alamofire 将数据上传到服务器
如何告诉/强制 GNU ld 将部分/符号放在输出 ELF 文件的特定部分?
如何防止 Spring Tool Suite maven JVM 进程将 java 图标放在 Mac 的 Dock 上?