将查询字符串值绑定到字典
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 中所述:
当您想使用查询字符串参数传递字典(基本上是键值对)时,您应该使用如下格式:
¶meters[0].key=keyName¶meters[0].value=keyValue
在我的 Action 方法签名中,参数定义为:
Dictionary<string,string> parameters
希望对您有所帮助。
在阅读了 Scott Hanselman 的 this post 之后,我自己想出了这个问题。所以感谢斯科特!!
谢谢,
尼拉夫
我正在使用 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 中所述:
当您想使用查询字符串参数传递字典(基本上是键值对)时,您应该使用如下格式:
¶meters[0].key=keyName¶meters[0].value=keyValue
在我的 Action 方法签名中,参数定义为:
Dictionary<string,string> parameters
希望对您有所帮助。
在阅读了 Scott Hanselman 的 this post 之后,我自己想出了这个问题。所以感谢斯科特!!
谢谢, 尼拉夫