1

下面是我的控制器中的 get 方法。它返回一个包含布尔“成功”、字符串“消息”和一个列表的 JSON。我如何使用 OData 查询列表?通常,如果返回类型是 IQueryable,那么以下将起作用 api/Category/all?$top=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;
}
4

2 回答 2

1

你可以用它ODataQueryOptions<T>来解决问题。您的代码将如下所示:

[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 应该与 QueryableAttribute 一样工作。

于 2012-11-19T23:12:46.940 回答
1

根据您提供的详细信息,该解决方案似乎只是使用了odata 格式。我的意思是这里没有使用支持您提到的查询语法的 ODATA 提供程序。因此,您必须自己处理分页场景。

即将推出的库 Microsoft ASP.NET Web API OData 0.2.0-alpha 将提供该功能,但仍处于 alpha 阶段。

您可以通过将操作参数命名为与查询字符串 ID 相同的名称,将查询字符串绑定到操作参数。所以,通过修改action asGetCategoryList(int top)你就可以得到参数中top参数的值。您还必须处理下一个 X 的场景。

于 2012-11-19T14:55:28.440 回答