.Net Core OData启用对单个实体集的过滤 [英] .Net Core OData enable filtering for single entity set

查看:137
本文介绍了.Net Core OData启用对单个实体集的过滤的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在.Net Core上运行OData Beta.我试图仅根据控制器启用odata的某些功能.我的启动课程看起来像这样:

I'm running the Beta of OData on .Net Core. I'm trying to only enable certain features of odata depending on the controller. My startup class looks like so:

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时,一切正常.但是,我无法公开我的所有实体

When I globally enable odata everything works fine. However, I cannot expose all of my entities

routeBuilder.Count().Filter().OrderBy().Expand().Select().MaxTop(null);

但是,当我尝试为特定实体集启用odata时,尝试过滤时会收到错误消息

but when, I try to enable odata for a specific entity set my I get an error when I attempt to filter

skillSet.EntityType.Count().Filter().OrderBy().Expand().Select();

URI中指定的查询无效.不能在$ filter查询选项中使用属性名称".

The query specified in the URI is not valid. The property 'Name' cannot be used in the $filter query option.

为了完整起见,这里是我的控制者:

For the sake of completeness here is my controller:

[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();
}

推荐答案

我想知道是否可以通过构建ModelBuilder.cs的方式解决您的问题

I wonder if your issue could be solved by the way ModelBuilder.cs is built in my SO question? In that page you should be able to define per entity what OData settings are permitted.

我在第一段中链接的文章将比我做的更好,因为这就是我所关注的.

The article I link to in the first paragraph will explain it better than I did as that was what I was following.

这篇关于.Net Core OData启用对单个实体集的过滤的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆