我正在尝试将 Kendo UI 网格与 ODataAction 结合使用。在这种情况下,我应该在网格dataSource中将请求类型指定为POST。但在这种情况下,我失去了排序,过滤等功能,因为OData参数在请求体中传递,OData Controller无法解析它。
URL example: "/odata/MyEntityCollection/MyCustomAction"
目前我正在使用绑定到OData服务本身的操作来避免该问题。
URL example: "/odata/MyCustomAction"
不需要POST操作。但过了一段时间后,我得到了很多方法,它变得非常混乱。
有没有人有类似的问题?有没有更好的方法来避免ODataAction限制?
提前致谢!
答案 0 :(得分:0)
如果将WebApi OData升级到最新版本,则可以解决此问题。现在它是5.2.0-alpha1-140307。
请参考此示例: http://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/OData/v4/ODataFunctionSample/
其中的Top10方法可以很好地解决您的问题。您需要做的唯一事情是在ProductsController.cs中将[EnableQuery]添加到Top10中。就像这样:
[HttpGet]
[EnableQuery]
public IHttpActionResult Top10()
{
var retval = _data.Values.OrderByDescending(p => p.Price).Take(10).ToList();
return Ok(retval);
}
然后您可以安全地向URL添加查询选项,例如
GET http://localhost:9010/odata/Products/Default.Top10()?$orderby=Id desc&$filter=Id gt 46
StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
OData-Version: 4.0
Date: Mon, 24 Mar 2014 09:54:57 GMT
Server: Microsoft-HTTPAPI/2.0
Content-Length: 304
Content-Type: application/json; odata.metadata=minimal; odata.streaming=true;
charset=utf-8
}
{
"@odata.context":"http://localhost:9010/odata/$metadata#Products","value":[
{
"Id":95,"Name":"Product 95","Price":998.542812186546
},{
"Id":88,"Name":"Product 88","Price":993.66847052875369
},{
"Id":58,"Name":"Product 58","Price":932.89687947039351
}
]
}
注意: