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

如何在ASP.NET Web API中全局设置ODataValidationSettings属性?

如何在ASP.NET Web API中全局设置ODataValidationSettings属性

当然可以全局设置ODataValidationSettings的属性,不用在每个控制器或Action上单独配置。下面给你两种可行的方法,都能在全局OData配置阶段完成MaxNodeCount的设置:

方法1:自定义全局EnableQueryAttribute

这种方法通过扩展EnableQueryAttribute,预设好你的验证设置,然后将其注册为全局过滤器,所有OData请求都会自动应用这个配置。

public static void Register(HttpConfiguration config)
{
    var builder = new ODataConventionModelBuilder();
    // 这里添加你的实体集配置,比如:
    // builder.EntitySet<Product>("Products");

    config.MapODataServiceRoute("odata", "odata", builder.GetEdmModel());

    // 自定义全局查询特性,设置验证规则
    var globalQueryAttribute = new EnableQueryAttribute
    {
        ValidationSettings = new ODataValidationSettings
        {
            MaxNodeCount = 20,
            // 你还可以在这里配置其他验证属性,比如MaxExpansionDepth等
        }
    };

    // 将自定义特性添加为全局过滤器
    config.Filters.Add(globalQueryAttribute);

    // 保留原有查询选项的链式配置(可选,和全局属性不冲突)
    config
        .Select()
        .Expand()
        .Filter()
        .OrderBy()
        .MaxTop(null)
        .Count();
}

方法2:通过ODataRouteSettings配置全局查询规则

另一种方式是直接在OData路由配置中指定全局查询设置,适合希望把路由和查询规则绑定的场景:

public static void Register(HttpConfiguration config)
{
    var builder = new ODataConventionModelBuilder();
    // 配置实体集...
    // builder.EntitySet<Order>("Orders");

    var edmModel = builder.GetEdmModel();

    // 创建路由配置并设置查询验证规则
    var routeConfig = new ODataRouteSettings
    {
        QuerySettings = new ODataQuerySettings
        {
            ValidationSettings = new ODataValidationSettings
            {
                MaxNodeCount = 20
            }
        }
    };

    // 使用自定义路由配置注册OData服务路由
    config.MapODataServiceRoute("odata", "odata", edmModel, routeConfig);

    // 启用基础查询选项
    config
        .Select()
        .Expand()
        .Filter()
        .OrderBy()
        .MaxTop(null)
        .Count();
}

小提示

  • 如果你的控制器Action上单独使用了[EnableQuery]特性,全局配置会被局部配置覆盖。如果想强制全局规则生效,可以移除局部的[EnableQuery],或者在自定义EnableQueryAttribute时重写优先级逻辑。
  • MaxNodeCount的作用是限制OData查询表达式的复杂度,防止恶意构造的复杂拖慢服务,建议根据你的业务场景设置合理数值。

内容的提问来源于stack exchange,提问作者mykhailo.romaniuk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:54:40