将查询字符串值绑定到字典中

5

我正在使用Web API(ASP.NET MVC 5的一部分),并尝试将查询字符串的值绑定到Dictionary<int, bool>

我的Web API方法如下:

[HttpGet]
[Route("api/items")]
public IQueryable<Item> GetItems(Dictionary<int, bool> cf)
{
    // ...
}

如果我尝试调用这个URL:
/api/items?cf[1009]=true&cf[1011]=true&cf[1012]=false&cf[1015]=true

这个cf参数始终是null

我如何通过查询字符串向Web API方法传递值字典?

3个回答

8
当您想要使用查询字符串参数传递字典(基本上是键值对)时,应该使用以下格式: &parameters[0].key=keyName&parameters[0].value=keyValue 在我的Action方法签名中,参数被定义为:
Dictionary<string,string> parameters

希望这能帮到您。
在阅读了 Scott Hanselman 的这篇文章后,我自己成功解决了问题。所以感谢 Scott!!
谢谢, Nirav

这是正确的答案,但我无法控制URL,所以对我没有用(我无法附加.key/.value)-最终我只能手动迭代Request.Form并手动解析结果。 - qJake

0

没有内置的方法可以做到这一点。在这种情况下,“cf [1009]”是参数的名称,而不是“cf”。您可以编写自己的查询字符串解析器来实现所需的功能。更好的签名应该是:

/api/items?cf=1009&cf=1011&cf=1015

你可以使用以下方式进行绑定:

public IQueryable<Item> GetItems(List<int> cf)
{
    // ...
}

1
这与 OP 的要求不符。需要更多关于 cf 条目的信息:即“true”或“false”。 - Steven Ryssaert

0

2
虽然这个链接可能回答了问题,但最好在此处包含答案的基本部分,并提供参考链接。 - Keale

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接