【问题标题】:webapi filter properties from dictionary<string,string>来自字典<string,string> 的 webapi 过滤器属性
【发布时间】:2014-01-20 16:52:50
【问题描述】:
我在我的 POST 方法中返回一个 IQueriable<Dictionary<string,string>>。我希望能够在字典上应用 OData 过滤器。例如:
字典是
Key = Place
Value = New York
my filter is ?$filter=Place eq 'New York'
**
但我得到一个错误:“:”实例属性'Place'未定义
键入'System.Collections.Generic.Dictionary`2[System.String
**
【问题讨论】:
标签:
c#
asp.net-web-api
odata
【解决方案1】:
我认为您可以通过创建一个名为“Places”的 GET 方法更简单地解决您的问题,该方法接受一个名为 key 的参数并返回在该控制器的 Dictionary 实例中查找 key 值的结果。像这样的:
[HttpGet]
public string Places(string key) {
//TODO: Handle validation of value key parameter & missing keys
return _placesDictionary[key];
}
IQueryable 实现旨在处理强类型集合。您的伪代码表明您打算按键值查询字典。
IQueryable<Dictionary<string,string>> 实际上定义了Dictionary<string,string> 实例的集合。您看到的错误是绝对正确的,Dictionary 类型中没有名为 Place 的属性。
【解决方案2】:
找到了第三方库的解决方案。 LinqToQuerystring
var queryValue = Request.RequestUri.ParseQueryString();
return _dictionary.LinqToQuerystring(queryValue.ToString());