【问题标题】:How limit OData results in a WebAPI如何限制 OData 在 WebAPI 中的结果
【发布时间】:2019-11-10 23:39:47
【问题描述】:

我目前正在开发一个应用程序,它使用 Web API 返回存储在数据库中的数据。

现在,我需要能够过滤结果,以便对请求进行 OData,这样我就可以在查询字符串中构建整个过滤器。

OData 的配置如下:

private static void ConfigureOData(HttpConfiguration config)
{
    ODataModelBuilder builder = new ODataConventionModelBuilder();
    builder.EntitySet<GenericArticle>("GenericArticle");
    config.MapODataServiceRoute(routeName: "ODataRoute", routePrefix: "OData", model: builder.GetEdmModel());

    // Defines the configuration for OData.
    var queryAttribute = new QueryableAttribute
    {
        MaxTop = Convert.ToInt32(ConfigurationManager.AppSettings["OData:MaxTop"]),
        PageSize = 2
    };

    config.EnableQuerySupport(queryAttribute);
}

正在从WebApiConfig.cs 文件中调用此方法。

Global.asax 文件确实包含以下代码:

protected void Application_Start()
{
    GlobalConfiguration.Configure(WebApiConfig.Register);
    GlobalConfiguration.Configuration.EnsureInitialized();

    UpdateDatabaseToLatestVersion();
}

我用来查询数据的控制器如下:

 [EnableQuery]
 public IQueryable<GenericArticle> Get()
 {
     var data = UnitOfWork.GenericArticlesRepository.Entities;

     return data;
 }

因此,该方法使用EnableQuery 属性进行标记,并且控制器也确实继承自ODataController

现在,我可以查询一些包含数百万条记录的表,当然,我什至不希望 GetAll 找到通往数据库的路径。

因此,我认为在WebApiConfig 文件中,以下代码就足够了:

var queryAttribute = new QueryableAttribute
{
    MaxTop = Convert.ToInt32(ConfigurationManager.AppSettings["OData:MaxTop"]),
    PageSize = 2
};

但是,这不会限制结果,但是当我使用大于此处定义的 MaxTop 值的 take 过滤器请求 url 时,它会引发错误。

有没有办法确保,即使我请求没有任何过滤参数的 url,结果也只会包含启用分页的前 'x' 条记录?

【问题讨论】:

    标签: c# asp.net-mvc-4 asp.net-web-api


    【解决方案1】:

    如果您想限制获取的记录数量,请尝试使用服务器分页选项来过滤记录。

    检查此链接 - http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/supporting-odata-query-options#server-paging

    【讨论】:

    • 感谢您的回答。我知道我可以通过在查询中指定它来做到这一点,但我坚信有一个通用的地方可以定义它(无需编写自定义属性)。
    猜你喜欢
    • 1970-01-01
    • 2013-04-01
    • 2014-09-07
    • 2014-02-16
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多