为何该URI在OData服务中触发运行时错误?
解决OData筛选中特殊字符引发的运行时错误问题
刚碰到这个问题的时候我也懵过,其实核心是URL参数编码的问题——你在请求里用了HTML转义的<来表示<字符,但OData服务的$filter参数认的是URL编码,不是HTML转义,这才导致服务器解析失败抛出运行时错误。
问题原因拆解
- 虽然
Supplier实体的Address属性是Edm.String类型,理论上支持任意UTF-8字符,但请求URL的参数必须符合URL编码规范,服务器才能正确解析筛选表达式。 - 你用的
<是HTML里用来转义<的实体,放到URL里会被服务器当成筛选表达式的一部分,破坏了表达式的语法结构,直接触发解析错误。
修复方案
把特殊字符换成对应的URL编码值就行:
- 将
<编码为%3C,修正后的请求URL应该是:http://services.odata.org/V4/Northwind/Northwind.svc/Suppliers?$filter=Address eq '%3CA' - 如果是代码生成请求,别手动编码,用语言自带的工具处理更稳妥:
- JavaScript里用
encodeURIComponent('<A') - C#里用
HttpUtility.UrlEncode("<A")
这些工具会自动处理所有需要编码的特殊字符,避免遗漏。
- JavaScript里用
小提醒
OData的字符串筛选值必须用单引号包裹,这一点你已经做对了,别忘就行~
内容的提问来源于stack exchange,提问作者lubosmj
相关产品推荐
相关产品推荐

