【发布时间】: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