【问题标题】:NSURL array parameter in query查询中的 NSURL 数组参数
【发布时间】:2018-01-18 11:03:59
【问题描述】:

我需要在查询段中构建一个包含数组的 NSURL。数组表示法如下所示:

test.com?arr[a]=1&arr[b]=2

这里的问题是 NSURL 转义了括号,所以最终的查询段看起来像这样:

test.com?arr%5Ba%5D=1&arr%5Bb%5D=2

经过一些研究,我偶然发现了 NSURLComponents 类,但就像我已经预料到的那样,NSURLQueryItem 对象只能将 NSStrings 作为值,因此也不能创建想要的输出。我还没有找到一种方法来构建一个包含非转义括号的 NSURL 对象。

【问题讨论】:

  • [NSURL URLWithString:@"test.com?arr[a]=1&arr[b]=2"] 似乎工作得很好
  • 我不这么认为。当我调用 [NSURL URLWithString:@"test.com?arr[a]=1&arr[b]=2"] 时,我得到一个带有转义括号的 NSURL 对象。
  • 在我个人看来,这是对查询模式的滥用。
  • 不,实际上不是。这是将(关联)数组放入 get 请求的查询部分的事实上的 http 标准。

标签: ios http nsurl


【解决方案1】:

将要保留的角色添加到集合中

NSString *myString = @"http://foo.bar/?key[]=value";
NSCharacterSet *theSet = [NSCharacterSet characterSetWithCharactersInString:@"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!*():/?[]="];
NSURL *myUrl = [NSURL URLWithString:[myString stringByAddingPercentEncodingWithAllowedCharacters:theSet]];

我不确定这是否有效,如果我将鼠标移动到 myUrl 上进行预览,则显示 []
但如果我这样做po myurl.absoluteString 它会显示逃逸

【讨论】:

  • 这仍然使用[NSURL URLWithString:],所以不会有什么不同。
【解决方案2】:

这个问题不再相关。据我所知,不可能构建包含非转义括号的 NSURL 对象。如果有人仍然找到这样做的方法,请随时将其留在这里。

【讨论】:

    【解决方案3】:

    这是一个老问题,但还没有回答,所以这里是:

    NSArray *queryItems = @[
        [NSURLQueryItem queryItemWithName:@"arr[a]" value:@"1"],
        [NSURLQueryItem queryItemWithName:@"arr[b]" value:@"2"],
    ];
    [components setQueryItems:queryItems];
    

    【讨论】:

      猜你喜欢
      • 2014-06-26
      • 1970-01-01
      • 2011-09-12
      • 1970-01-01
      • 2013-07-12
      • 2014-10-13
      • 2020-05-17
      • 2020-10-07
      • 2021-10-22
      相关资源
      最近更新 更多