filter - ACS:search.in 不支持 odata 过滤器语法中的特殊字符
问题描述
特殊字符不适用于 ACS 中的 search.in 运算符,例如这不会从 ACS 获取任何值
search.in(category, 'Books & reference')
。我还尝试对特殊字符进行如下编码,但仍然没有运气。
search.in(category, 'Books%20%26%20reference')
search.in(category, 'Books %26 reference')
search.in(category, 'Books+%26+reference')
search.in(category, 'Books & reference')
它工作的唯一方法是使用eq
运算符如下
category eq 'Books & reference'
但是根据 ACS 文档,seach.in 在有多个要过滤的属性值时性能更高,也更方便
search.in(category, 'Movies,Education,Tools')
比使用 eq 运算符更方便如下
category eq 'Books' OR category eq 'Education' OR category eq 'Tools'
解决方案
请尝试更改:
search.in(category, 'Books & reference')
至
search.in(category, 'Books & reference', '|')
本质上,在第一个中,space
被视为分隔符。在第二个中,您明确告诉使用 apipe (|)
作为分隔符。
考虑到管道字符不在您的搜索值中的任何位置,因此会搜索您的类别字段,而在第一种情况下,会针对类别字段中的、和值Books & reference
执行搜索。Book
&
reference
这就是documentation
关于分隔符的说法(强调我的):
解析 valueList 参数时将每个字符视为分隔符的字符串。此参数的默认值为“,” ,这意味着它们之间的任何带有空格和/或逗号的值都将被分隔。如果您需要使用空格和逗号以外的分隔符,因为您的值包含这些字符,您可以指定备用分隔符,例如“|” 在这个参数中。
推荐阅读
- mvvm - 是否可以实现不是 WPF 模块的模块(标准类库,无屏幕)?
- ruby-on-rails - 按 ID 获取 PaperTrail::Version
- python - 无法序列化只读字段
- firebase - 未看到非活动用户的 FCM 通知图像
- javascript - 如何设置在其他页面重新加载时将显示的默认屏幕?反应路由器
- angular - 如何通过 api 调用传递数据并获取特定详细信息
- python - 如何在硒中修复此错误/警告?
- node.js - 阅读我的回复时我得到未定义但 React.js 中有回复
- .net - 为什么 roslyn SyntaxGenerator 不生成 params 数组和可选参数?
- angular - 角度反应形式验证子控件中的所需状态