我需要检查并验证OData过滤器查询必须包含属性和值。
例如:让我们说一下传入的过滤器查询,
(当然“RegionID”和值“5”需要动态更改,因此同样的过滤器可用于检查其他属性和值,甚至多个属性和多个值)
到目前为止,我一直在尝试使用自定义FilterQueryValidator
来验证上述方案(如此处Security Guidance for ASP.NET Web API 2 OData所述)。但仍然无法弄清楚如何做到这一点。
所以我的问题是,
FilterQueryValidator
?FilterQueryValidator
做到这一点? (如果可能的话可以
你请给我一些示例代码作为起点。)感谢。
更新
根据范欧阳的回答,我最终覆盖Validate
和ValidateSingleValuePropertyAccessNode
以检查所需参数
答案 0 :(得分:1)
场景8:如何为$ skip,$ top,$ orderby,$ filter
自定义默认验证逻辑在ValidateSingleValuePropertyAccessNode
方法中
通过propertyAccessNode.Property.Name
检查媒体资源名称,通过binaryOperatorNode.OperatorKind
var binaryOperatorNode = propertyAccessNode.Source as BinaryOperatorNode
检查binaryOperatorNode.Right as ConstantNode
处的右侧5。
我认为有足够的钩子和公共方法来实现这一点,代码很明确https://github.com/OData/WebApi/blob/master/OData/src/System.Web.Http.OData/OData/Query/Validators/FilterQueryValidator.cs