如何限制 WebAPI 中的 OData 结果
How limit OData results in a WebAPI
我目前正在开发一个应用程序,该应用程序使用 Web API 到存储在数据库中的 return 数据。
现在,我需要能够过滤结果,所以 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
};
但是,这并不限制结果,但是当我请求 url 时它会抛出一个错误,其中的 take 过滤器大于此处定义的 MaxTop 值。
有没有办法确保,即使我在没有任何过滤器参数的情况下请求 url,结果也将仅包含启用分页的前 'x' 条记录?
如果您想限制记录的获取数量,请尝试使用服务器分页选项来过滤记录。
我目前正在开发一个应用程序,该应用程序使用 Web API 到存储在数据库中的 return 数据。
现在,我需要能够过滤结果,所以 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
};
但是,这并不限制结果,但是当我请求 url 时它会抛出一个错误,其中的 take 过滤器大于此处定义的 MaxTop 值。
有没有办法确保,即使我在没有任何过滤器参数的情况下请求 url,结果也将仅包含启用分页的前 'x' 条记录?
如果您想限制记录的获取数量,请尝试使用服务器分页选项来过滤记录。