使用WebAPI在OData V4端点上启用嵌套任何查询

时间:2017-10-31 15:26:39

标签: asp.net-web-api odata any

我试图建立一个嵌套的任何类似的查询...

  

〜/ Api / Calendar?$ filter = Roles / any(r:r / User / any(u:u / name eq' Joe)   布罗格斯'))

如果我删除内部的任何条款,请留下我......

  

〜/原料药/日历$滤波器=角色/任何?(R:R /用户/任何())

...然后端点返回...

{
    "error": {
        "code": "",
        "message": "The query specified in the URI is not valid. The Any/All nesting limit of '1' has been exceeded. 'MaxAnyAllExpressionDepth' can be configured on ODataQuerySettings or EnableQueryAttribute."
    }
}

......我认为这可以解决这个问题,但实际上我已经在这里了。

到目前为止,我已尝试在上下文初始化过程中使用此限制来提高此限制,但它似乎并没有起作用....

config.AddODataQueryFilter(new EnableQueryAttribute { MaxAnyAllExpressionDepth = 3 });

有没有人有任何想法如何在全球范围内做到这一点(我不想让每个控制器都采取行动并设定深度。

更新:

所以事实证明我从我自己的baseEntityController继承的地方,在我有了EnableQuery属性的操作上,这超过了我的全局配置更改,因为我的更改没有被尊重。

简单地从动作中删除属性本身有从我的基础继承的所有控制器使用这个新的嵌套的任何和所有限制,但我现在似乎有扩展的副作用不再工作..

var query = new EnableQueryAttribute {
    MaxExpansionDepth = 8,
    PageSize = 100,
    MaxAnyAllExpressionDepth = 3,
    AllowedFunctions = System.Web.OData.Query.AllowedFunctions.All,
    AllowedLogicalOperators = System.Web.OData.Query.AllowedLogicalOperators.All,
    AllowedQueryOptions = System.Web.OData.Query.AllowedQueryOptions.All,
    AllowedArithmeticOperators = System.Web.OData.Query.AllowedArithmeticOperators.All,
    MaxTop = 1000
};
config.AddODataQueryFilter(query);

..正如你所看到的那样,我尝试在那里投入大量额外内容,但它没有任何附加功能!

1 个答案:

答案 0 :(得分:0)

我发现这样做的最简单的方法是让所有工作都在基础控制器操作上应用属性,因此它将所有内容正确应用于该控制器上的操作或其任何派生类型。

这不是我的理想,但我无法找到一种方法来获得全局修复,以便将其作为初始化odata环境的一部分。

希望这会帮助那些人。