如何在OData端点URL中允许单引号字符?解决过滤解析异常
嘿,这个问题我之前也碰到过,是OData查询里单引号没正确转义导致的解析崩溃,我来给你说怎么解决:
问题根源
你测试URL里的FirstName eq 'test'20001'这段有语法问题——在OData的字符串字面量里,单引号是特殊字符,如果字符串本身包含单引号,必须用两个连续的单引号来表示一个实际的单引号。你这里的test'20001直接写成'test'20001',解析器会把中间的单引号当成字符串的结束标记,后面的20001'就成了无效语法,直接导致解析崩溃。
直接修正的URL
把FirstName里的单引号转义后,正确的查询URL应该是这样:
http://localhost.com/Clients?$filter=FirstName eq 'test''20001' and LastName eq 'test20001'
注意看,test'20001变成了test''20001,用两个单引号代替了原来的单个单引号。
长期规避方案
为了以后不再踩这个坑,建议不要手动拼接用户输入到OData查询里:
- 用官方的OData客户端库(比如Microsoft.OData.Client)来构建查询,这些库会自动帮你处理特殊字符的转义,不用自己操心
- 如果一定要手动拼接,记得对所有用户输入的字符串做预处理,把单个
'替换成''
内容的提问来源于stack exchange,提问作者NinjaDeveloper
相关产品推荐
相关产品推荐

