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

Binding querystring values to a dictionary

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

我的网站 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

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

没有执行此操作的内置方法。在这种情况下,"cf[1009]" 是参数的名称,而不是 "cf"。您可以编写自己的查询字符串解析器来实现您的需要。更好的签名是:

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

然后您使用以下方式绑定它:

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

您可以为您的字典创建一个 ModelBinder,如此 post 中所述:

当您想使用查询字符串参数传递字典(基本上是键值对)时,您应该使用如下格式: &parameters[0].key=keyName&parameters[0].value=keyValue

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

Dictionary<string,string> parameters

希望对您有所帮助。

在阅读了 Scott Hanselman 的 this post 之后,我自己想出了这个问题。所以感谢斯科特!!

谢谢, 尼拉夫