javascript - Azure 搜索查询在包含撇号时会导致错误响应 400
问题描述
我有两个 Facet 用于通过 Azure 搜索进行过滤:Revit 的 2014和Revit 2016,但两者在查询中的行为不同。
传递带有“Revit”的查询时出现错误 400(错误请求):
(search.in(Application, '7946ca7e-78d0-441a-b939-711cae340dc0||Revit\'s||2014', '<^>'))
但是,包含“Revit”(无撇号)的查询工作得非常好:
(search.in(Application, 'c691dc7f-1c08-4a1c-bc4b-db62b214a0b3||Revit||2016', '<^>'))
Azure 搜索文档指出,危险或保留字符需要通过在它们之前添加“\”来转义,我正在这样做,但错误仍在发生。
错误信息是:
"Invalid expression: ')' or ',' expected at position 125 in 'ContextId eq '72adad30-c07c-465d-a1fe-2f2dfac950a4' and (search.in(Application, 'c691dc7f-1c08-4a1c-bc4b-db62b214a0b3||Revit's||2014', '<^>'))'.\r\nParameter name: $filter"
我尝试过使用 %27 替换 ' 或使用以下解决方案:
name = name.replace(/'/g, escape);
没有人在工作。
解决方案
解决方案很简单,只需在撇号后面放一个撇号就可以逃脱。因此,在我的示例中,将字符串从“Revit's”更改为“Revit's”就可以了。RFC 3986 编码技术不编码某些字符,包括撇号。
推荐阅读
- javascript - 如何使用类删除监听器
- ruby-on-rails - 在 Ruby 中使用 RestClient 传递编码的 URL 查询参数会给出不正确的结果
- sql - 使用外键从现有数据库更改身份
- class - Pytorch 的 nn.Linear(x,y) 返回什么?
- css - 如何在 {xaringan} 演示文稿中使 {stargazer} 表更小?
- google-apps-script - 自动归档gmail的脚本突然被删除了
- google-pagespeed - 为什么我的“Core Web Vitals”几乎总是空的?
- lsmeans - 如何解释最小二乘均值和标准误差
- python - 函数内部的while循环
- sql - MS Access 2016 左连接创建重复记录