我发现有时可以发布一个
$filter
OData 请求,其数字文字值以一个字母为后缀,例如可以在此处进行测试“round(Freight) eq 32l”。通过删除后缀或使用后缀 m
、
M
、
L
,其工作原理也相同。如果使用
d
或
f
,则会出现类型不匹配错误(与
Edm.Decimal
属性一起使用的浮点文字)。如果使用
a
、
b
(以及其他),则表示语法错误。有时,这个后缀似乎是强制性的,有时又不是。
我在 OData 标准中进行了一些搜索(我的发现如下所述)。我得出的结论是,在 OData 2.0 中,这些后缀是强制性的,但自 OData 3.0 起,这些后缀无效,并且如果某些 OData 3.0 或 4.0 服务器实现接受它们,则违反标准。
您能否证实这一点,并分享一些官方的 OData 解释来解释 OData 2.0 和 3.0 之间的这一重大变化?
我的发现:
(1)
OData 2.0 > URI 约定 > 4.5。过滤系统查询选项($filter)(虽然文本“32d”指的是带有“32”的链接,但在URL中手动设置“32d”也可以):
URI 约定 > 4.5。过滤系统查询选项 ($filter)"/>:
URI 约定 > 4.5。过滤系统查询选项 ($filter) > 数学函数"/>,不再提及“32d”:
第 1 部分:协议 > 11.2.6.1.2 内置查询函数 > 算术函数"/>:
第 2 部分:URL 约定 > 5.1.1.9 算术函数"/>
、
f
和
m
仅在 OData V2 中允许(并且某些实现需要)。OData V4 中的数字文字不需要或允许这些后缀。