我正在研究在 GET 请求中为同一参数名称传递多个值的正确方法是什么。
我见过这样的网址:
http://server/action?id=a&id=b
我见过这样的网址:
http://server/action?id=a,b
我的理解是第一个是正确的,但我找不到任何参考资料。我查看了 http 规范,但没有看到有关如何组成 URL 的“查询”部分的任何内容。
我不想要一个“都可以”的答案 - 如果我正在构建一个 Web 服务,我想知道这些方法中哪一个是标准的,以便使用我的 Web 服务的人知道如何传递同名的多个参数.
那么,有人可以指点我一个官方参考来源来确认哪个选项是正确的吗?
确实,没有明确的标准。要支持该信息,请查看维基百科的“查询字符串”章节。有如下评论:
虽然没有明确的标准,但大多数 Web 框架都允许 多个值与单个字段关联。[3]此外,当您查看RFC 3986
时,在第3.4查询节中,没有对具有多个值的参数的定义。 大多数应用程序使用您显示的第一个选项:
http://server/action?id=a&id=b
。要支持该信息,请查看有关 ASP.NET 应用程序的
Stackoverflow 链接和MSDN 链接,它们对具有多个值的参数使用相同的标准。 但是,由于您正在开发 API,我建议您做对您来说最简单的事情,因为 API 的调用者在创建查询字符串时不会遇到太多麻烦。
<select multiple>
以及它如何处理 w3schools 示例中的多个值。
<form action="/action_page.php">
<select name="cars" multiple>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="opel">Opel</option>
<option value="audi">Audi</option>
</select>
<input type="submit">
</form>
对于 PHP 使用:
<select name="cars[]" multiple>
从上面如果您点击“saab, opel”并点击提交,它将生成
cars=saab&cars=opel的结果。然后,根据后端服务器的不同,参数 cars 应该作为一个数组出现,您可以进一步处理。 希望这可以帮助任何寻求更“标准”方法来处理此问题的人。
http://server/action?id=a,b
id_filter = id.split(',')
因此,如果我在请求中发送两个值,
http://server/action?id=a,b
那么数据上的过滤器就是
id_filter = ['a', 'b']
如果我在请求中仅发送一个值,
http://server/action?id=a
那么过滤结果是
id_filter = ['a']
queryset = queryset.filter(model_id__in=id_filter)
粗略地说,它执行相当于 SQL 的
WHERE model_id IN ('a', 'b')
第一个请求 并且,
WHERE model_id IN ('a')
第二个请求。
这也适用于请求中超过 2 个参数值!
。 提交多值表单字段,即提交数组,可以通过
几种不同的方式完成,因为不一定阐明标准。 发送多值字段或数组的三种可能方法是:
http://localhost:3000/foo?
id[]=a&id[]=b退货
Array
(
[id] => Array
(
[0] => a
[1] => b
)
)
(注意:在这种情况下,将查询键命名为 some_name[] 很重要,以便 PHP 将生成的请求变量注册为数组)
http://localhost/?key[]=1&key[]=2
退货:
Array
(
[key] => Array
(
[0] => 1
[1] => 2
)
String baseUrl = "http://server/action"
String id = "a,b";
StringBuilder url = new StringBuilder();
url = baseUrl.append("?");
String[] idArr = id.split(",");
StringBuilder sb = new StringBuilder();
for ( String fetchId : idArr) {
sb.append("&id=").append(fetchId);
url.append(sb);
}