ios - 有什么方法可以将参数的 NSDictionary 附加到 NSURLRequest 而不是手动制作字符串?

标签 ios objective-c nsurlconnection nsurlrequest nsurlsession

AFNetworking 允许您将参数的 NSDictionary 添加到请求中,并将它们附加到请求中。所以如果我想用 ?q=8&home=8888 做一个 GET 请求,我只需要做一个像 @{@"q": @"这样的 NSDictionary 8", @"home": @"8888"} 非常简单。

有没有办法用 NSURLSession/NSURLConnection/NSURLRequest 来做到这一点?

我知道我可以使用 NSJSONSerialization 来附加 JSON 数据,但是如果我只想将它们作为 URL 中的 GET 参数怎么办?我应该只添加一个类别吗?

最佳答案

您可以通过使用 NSURLComponents 和 NSURLQueryItems 更新 url 来做到这一点。在下面的示例中,假设 URL 参数已经在 NSMutableURLRequest 上设置。您可以在使用它之前修改它以包含 NSDictionary params 中的每个参数。请注意,每个参数在写入之前都已编码。

NSURLComponents *url = [[NSURLComponents alloc] initWithURL:request.URL resolvingAgainstBaseURL:YES];
NSMutableArray *queryItems = NSMutableArray.new;
[params enumerateKeysAndObjectsUsingBlock:^(NSString *name, NSString *value, BOOL *stop) {
    [queryItems addObject:[NSURLQueryItem queryItemWithName:name
                           value:[value stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet.URLQueryAllowedCharacterSet]]];
            }];
url.queryItems = queryItems;
request.URL = url.URL;

关于ios - 有什么方法可以将参数的 NSDictionary 附加到 NSURLRequest 而不是手动制作字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21299362/

相关文章:

ios - iOS 11 的商店服务崩溃

iOS : Show the Callout view on moving pin

ios - UIImageView 不会动画,只有静态图像

ios - 异步数据调用 & CoreAnimation

ios - 从缓存响应中停止 NSURLConnection sendAsynchronousRequest

ios - 序列化 NSURLConnection 请求 (iOS) - 使用同步请求?

javascript - iphone 的 jplayer 错误

ios - UITextField 的输入 View 未更改

ios - 对 TableView 的每个单元格的 Alamofire 请求

objective-c - 调用 dismissPopoverAnimated 或在弹出窗口外单击一次时,弹出窗口不会被关闭