如何在 Swift 中检索 NSURLRequest 的 HTTPBody 参数到 Dictionary: [NSObject: AnyObject]
Posted
技术标签:
【中文标题】如何在 Swift 中检索 NSURLRequest 的 HTTPBody 参数到 Dictionary: [NSObject: AnyObject]【英文标题】:how to retrieve NSURLRequest's HTTPBody params to Dictionary: [NSObject: AnyObject] in Swift 【发布时间】:2015-05-27 13:40:32 【问题描述】:我正在尝试将NSURLRequest
的HTTPBody
从NSData
转换为Dictionary
,以便访问它的参数并运行检查。
var parameters: [NSObject: AnyObject?] = [
"method": "foo",
]
var urlRequestString = "www.foobar.com/api/aMethod"
var urlRequest = AFOAuth2Manager().requestSerializer.requestWithMethod("POST",
URLString:urlRequestString ,
parameters: postParameters,
error: nil)
在另一种方法中,我试图对上面构造的urlRequest
进行检查,以确保 NSURLRequest 中的"method"
包含正确的值"foo"
。
我需要将HTTPBody
转换为Dictionary
([NSObject: AnyObject]
)
这样我就可以检查"method"
参数是否包含我需要的值。
我怎样才能做到这一点?
【问题讨论】:
【参考方案1】:试试这个:
func queryDictionaryForQueryString(query: String) -> Dictionary<String, String>
var dictionary = [String: String]()
for keyValueString in query.componentsSeparatedByString("&")
var parts = keyValueString.componentsSeparatedByString("=")
if parts.count < 2 continue;
var key = parts[0].stringByRemovingPercentEncoding!
var value = parts[1].stringByRemovingPercentEncoding!
dictionary[key] = value
return dictionary
那么你可以
let httpBody = urlRequest.HTTPBody
let httpBodyString = NSString(data: httpBody!, encoding: NSUTF8StringEncoding) as! String
let queryDictionary = queryDictionaryForQueryString(httpBodyString)
println(queryDictionary["method"])
【讨论】:
"let httpBodyString = NSString(data: httpBody!, encoding: NSUTF8StringEncoding) as!String" 为我返回 nil。 httpBody 在我的地方是 NSMutableData 并且转换为 String 似乎不起作用。【参考方案2】:这是我的更 Swifty 3.0 NSURL 扩展,以实现零安全性:
extension NSURL
var paramsDictionary: [String : String]?
guard let parameterString = parameterString else
return nil
var dictionary: [String : String] = [:]
parameterString.components(separatedBy: "&").forEach
let componants = $0.components(separatedBy: "=")
guard let name = componants[0].removingPercentEncoding, let value = componants[1].removingPercentEncoding else
return
dictionary[name] = value
return dictionary.isEmpty ? nil : dictionary
var url = NSURL(string: "https://www.testWebSite.com/index.php;param=value&testParam=test&thingParam=thing")
let params = url?.paramsDictionary //results in "Optional(["thingParam": "thing", "testParam": "test", "param": "value"])"
【讨论】:
以上是关于如何在 Swift 中检索 NSURLRequest 的 HTTPBody 参数到 Dictionary: [NSObject: AnyObject]的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Swift 中嵌入 UITableView 的文本字段中检索数据?
如何从 Swift 类中检索目标 C 类中的 Userdefault?
如何在 Swift 中“正确”保存 PFFile 并检索 url
如何在 Swift 5.2 中使用 PHAsset.fetchAssets(withLocalIdentifiers:) 从照片库中检索照片?