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

时间:2015-03-28 17:43:27

标签: c# asp.net-mvc asp.net-web-api query-string

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

我的Web API方法很简单:

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

如果我尝试调用此网址:

/api/items?cf[1009]=true&cf[1011]=true&cf[1012]=false&cf[1015]=true

参数cf始终为null

如何通过QueryString将值字典传递给Web API方法?

3 个答案:

答案 0 :(得分:6)

如果要使用查询字符串参数传递字典(基本上是键和值对),则应使用以下格式: &parameters[0].key=keyName&parameters[0].value=keyValue

在我的Action方法签名中,参数定义为:

Dictionary<string,string> parameters

希望这有帮助。

在阅读Scott Hanselman的this post之后,我能够自己解决这个问题。谢谢Scott !!

谢谢, Nirav

答案 1 :(得分:0)

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

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

然后使用以下方法绑定它:

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

答案 2 :(得分:0)

您可以为字典创建一个ModelBinder,如本文所述:

https://stackoverflow.com/a/22708383