You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core OData Beta:单实体集启用筛选及按控制器配置功能

我来帮你搞定.NET Core OData Beta版本的细粒度功能控制需求,咱们分控制器级和实体集级两个维度来实现:

一、控制器级别精准启用特定OData功能

首先你已经注释掉了全局的routeBuilder.Count().Filter().OrderBy().Expand().Select().MaxTop(null)这行代码,这是对的——全局全开不符合你按需启用的需求。接下来咱们用[EnableQuery]特性在单个控制器Action上指定允许的功能:

public class SkillsController : ODataController
{
    // 仅允许这个列表接口使用Filter和Select功能
    [EnableQuery(AllowedQueryOptions = AllowedQueryOptions.Filter | AllowedQueryOptions.Select)]
    public IActionResult Get()
    {
        // 替换成你的业务逻辑
        return Ok(_skillService.GetAllSkills());
    }

    // 这个详情接口允许OrderBy和Expand
    [EnableQuery(AllowedQueryOptions = AllowedQueryOptions.OrderBy | AllowedQueryOptions.Expand)]
    public IActionResult Get(int key)
    {
        var skill = _skillService.GetSkillById(key);
        if (skill == null) return NotFound();
        return Ok(skill);
    }
}

你可以通过组合AllowedQueryOptions枚举值,给每个Action单独配置允许的OData功能,完全避免全局配置的冗余。

二、单个实体集启用筛选功能

如果需要针对模型里的某个实体集(比如你的SkillSet)单独启用筛选,其他实体集不开放这个功能,可以在构建EdmModel时给目标实体集添加注解:

public static IEdmModel GetModel()
{
    var builder = new ODataConventionModelBuilder();
    
    // 配置Skill实体集,并仅允许它使用Filter功能
    var skillSet = builder.EntitySet<Skill>("Skills");
    skillSet.EntityType.HasKey(s => s.Id); // 确保主键配置完整
    // 添加实体集级别的功能限制注解
    skillSet.HasAnnotation("AllowedQueryOptions", AllowedQueryOptions.Filter);

    // 其他实体集(比如Departments)不配置该注解,就默认不开放筛选
    var departmentSet = builder.EntitySet<Department>("Departments");

    return builder.GetEdmModel();
}

如果想让控制器Action遵循实体集的配置,只需要把[EnableQuery]的AllowedQueryOptions设为Restricted即可:

[EnableQuery(AllowedQueryOptions = AllowedQueryOptions.Restricted)]
public IActionResult Get()
{
    return Ok(_skillService.GetAllSkills());
}

这样这个接口就会严格遵循实体集层面配置的仅允许筛选的规则。

最后注意事项
  • 确保你的OData Beta版本支持上述注解和特性(目前主流Beta版本都兼容)
  • 全局配置里不要重新开启所有查询选项,保持你现在注释掉那行的状态
  • 可以结合控制器和实体集的配置,实现双重校验,进一步提升权限控制的精准度

内容的提问来源于stack exchange,提问作者johnny 5

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:07:26