查询字符串?&空参数Web API

时间:2014-12-04 12:38:47

标签: c# .net url asp.net-web-api model-binding

采取以下行动:

public IHttpActionResult GetStuff(
    string like = null,
    [FromUri]string[] state = null,
    [FromUri]string[] mode = null,
    [FromUri]string[] label = null,
)

当我将其查询为/api/stuff?state=A&state=B时,模型绑定器使用2个字符串值实例化state数组,并且它足以实例化空modelabel数组所以我不需要检查空值。但是,如果我将其查询为/api/stuff?&state=A&state=B(请注意额外的&符号)modelabel数组不再为空 - 它们都包含单个null元素。为什么呢?

根据我的理解,查询字符串是等效的。有没有办法在不编写自定义绑定器的情况下修复它?

1 个答案:

答案 0 :(得分:2)

两个查询字符串不等效。您的第二个查询有第二个无名参数。

/api/stuff?state=A&state=B =带有1个参数state的查询字符串。

/api/stuff?&state=A&state=B =包含2个参数的查询字符串,statenameless个。

?&转换为无名参数名称,其值为null

Route解析器正确解析state。但是它会检测到第二个参数,但它不知道放在哪里。它最终将它放在你的其他参数中。

Route解析器的逻辑与此类似:
- 我正在寻找state ...哦,就是这样,让我们​​来吧 - 我正在寻找mode ......没有找到任何东西,但是嘿,有一个无名的,让我们填充它。
- 我正在寻找label ......没有找到任何东西,但是嘿,有一个无名的,让我们填充它。

PS:你可以像这样发送一个无名的查询字符串参数:

http://www.myurl.com/?=value