我在.Net Core上运行OData的Beta版。我试图仅根据控制器启用odata的某些功能。我的启动课看起来像这样:
services.AddOData();
//...
app.UseMvc(routeBuilder =>
{
//routeBuilder.Count().Filter().OrderBy().Expand().Select().MaxTop(null);
routeBuilder.MapODataServiceRoute("odata", null, GetModel());
routeBuilder.EnableDependencyInjection();
});
public static IEdmModel GetModel()
{
var builder = new ODataConventionModelBuilder();
var skillSet = builder.EntitySet<Skill>(nameof(Skill));
skillSet.EntityType.Count().Filter().OrderBy().Expand().Select();
builder.Namespace = "ODataTest.Models";
builder.ContainerName = "DefaultContainer";
return builder.GetEdmModel();
}
当我全球启用odata时,一切正常。但是,我无法公开我的所有实体
routeBuilder.Count().Filter().OrderBy().Expand().Select().MaxTop(null);
但是,当我尝试为特定实体集启用odata时,我在尝试过滤时遇到错误
skillSet.EntityType.Count().Filter().OrderBy().Expand().Select();
URI中指定的查询无效。该物业名称&#39;不能在$ filter查询选项中使用。
为了完整起见,这是我的控制器:
[HttpGet]
[EnableQuery]
public async Task<Skill[]> GetFilteredODataList(ODataQueryOptions<Skill> q)
{
var skillsQuery = this._context.Skills.AsQueryable();
if (q?.Filter != null)
{
skillsQuery = q.Filter.ApplyTo(skillsQuery, new ODataQuerySettings()) as IQueryable<Skill>;
}
return await skillsQuery.ToArrayAsync();
}
答案 0 :(得分:1)
我想知道您的问题是否可以通过构建ModelBuilder.cs的方式解决in my SO question?在该页面中,您应该能够为每个实体定义允许的OData设置。
我在第一段中链接到的文章将比我更好地解释它,因为那是我所关注的。