如何具体适用寻呼列表是使用asp.net的OData协议的JSON的一部分(How to apply

2019-10-17 10:20发布

下面是我的控制器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;
}

Answer 1:

与您所提供的信息,该解决方案似乎只是被利用的OData格式 。 我的意思是,一个ODATA供应商,支持你提到的查询语法,这里不使用。 所以,你必须自己处理分页方案。

有一个即将到来的图书馆,微软的ASP.NET Web API的OData 0.2.0-α,这将提供该功能,但它仍然在阿尔法。

您可以通过命名的动作参数相同的查询字符串ID的查询字符串动作参数绑定。 因此,通过修改行动GetCategoryList(int top)你就可以得到在参数上参数的值。 你必须处理的情况下一个X也。



Answer 2:

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