【问题标题】:Enabling nested any queries on OData V4 endpoints with WebAPI使用 WebAPI 启用对 OData V4 端点的任何嵌套查询
【发布时间】:2017-11-01 01:03:10
【问题描述】:

我正在尝试构建一个这样的嵌套查询...

~/Api/Calendar?$filter=Roles/any(r:r/User/any(u:u/Name eq 'Joe 博客'))

如果我删除内部的 any 子句,留下...

~/Api/Calendar?$filter=Roles/any(r:r/User/any())

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

{
    "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 });

有没有人知道如何在全局范围内执行此操作(我不想在每个控制器上执行每个 get 操作并设置深度。

更新:

所以事实证明,我从自己的 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);

.. 如您所见,我尝试在其中添加很多额外内容,但没有任何内容!

【问题讨论】:

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


    【解决方案1】:

    我发现做到这一点并使一切正常的最简单方法是将属性应用于基本控制器动作,因此它将所有内容正确地应用于该控制器或其任何派生类型上的动作。

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

    希望这会对那里的人有所帮助。

    【讨论】:

    • 请问您是如何在基本控制器上应用此属性的...我也面临同样的问题
    • 我的示例中的代码在启动时启动并为所有 OData 操作全面启用它,但是如果您想具体一点,您可以通过从 ODataController 继承并启用它来创建自己的基本控制器这...
    • [EnableQuery]公共抽象类 BaseController : ODataController { ... }
    猜你喜欢
    • 2015-03-18
    • 2018-11-29
    • 2016-06-25
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    • 2015-03-07
    相关资源
    最近更新 更多