下面是我的控制器get方法。 它返回一个包含布尔“成功,字符串‘消息’和列表的JSON。我怎样才能查询使用OData的?一般来说如果返回类型为IQueryable的那么下面会工作的API /分类/所有?$顶部= 5到列表获得前5 ....但我应该在我的情况怎么办?
// Get all Categories
[HttpGet]
[ActionName("all")]
[Queryable]
public HttpResponseMessage GetCategoryList()
{
var categoryList = this.Repository.GetCategories().AsQueryable<Category>();
return Request.CreateResponse(HttpStatusCode.OK, new ResponseMessage<IQueryable<Category>> { success = true, data = categoryList });
}
public class ResponseMessage<T> where T: class
{
public string message;
public bool success;
public T data;
}
与您所提供的信息,该解决方案似乎只是被利用的OData格式 。 我的意思是,一个ODATA供应商,支持你提到的查询语法,这里不使用。 所以,你必须自己处理分页方案。
有一个即将到来的图书馆,微软的ASP.NET Web API的OData 0.2.0-α,这将提供该功能,但它仍然在阿尔法。
您可以通过命名的动作参数相同的查询字符串ID的查询字符串动作参数绑定。 因此,通过修改行动GetCategoryList(int top)
你就可以得到在参数上参数的值。 你必须处理的情况下一个X也。
You can use ODataQueryOptions<T>
to solve the problem. Your code will look like:
[HttpGet]
[ActionName("all")]
public HttpResponseMessage GetCategoryList(ODataQueryOptions<Category> options)
{
var categoryList = this.Repository.GetCategories().AsQueryable<Category>();
categoryList = options.ApplyTo(categoryList) as IQueryable<Category>;
return Request.CreateResponse(HttpStatusCode.OK, new ResponseMessage<IQueryable<Category>> { success = true, data = categoryList });
}
ODataQueryOptions should work same as QueryableAttribute.
文章来源: How to apply paging specifically to a list which is part of a JSON using asp.net OData protocol