如何转义 odata uri 段起始美元符号 ($)



运行此查询:

"https://someurl.com/graph/users/%24myuser%40myorg.org/licenseDetails?$select=skuId,skuPartNumber">

结果:

"请求 URI 无效。由于段'users'指的是一个集合,所以这必须是请求URI中的最后一个段,或者它后面必须跟着一个可以绑定到它的函数或操作,否则所有中间段都必须引用单个资源。

经过一番尝试,我设法通过在myuser之前添加第二个美元符号(%24(来使其工作。

这似乎记录得很差,即使在这里 https://docs.oasis-open.org/odata/odata/v4.0/errata02/os/complete/abnf/odata-abnf-construction-rules.txt。

是否有一个 c# 库可以正确转义 odata 的给定文本字符串,而不是每个人都不时手动遇到问题?

对于这些似乎没有记录的特殊情况,不应该改进文档吗?

OData URL 中的$前缀通常指定您将要使用系统查询选项,例如$filter$select$expand。这可能会导致您的密钥被解释为这样。

由于使用实体键访问特定实体,然后导航到其导航属性之一,因此通常可以直接在实体的括号内提供键。当您没有组合键时,这很简单,如下所示:

/users('my-key-value')

然后,您可以展开特定的导航属性,并以与之前尝试相同的方式向下选择特定属性(假设实现符合此属性(,从而导致

/users('$myuser@myorg.org')/licenseDetails?$select=skuId,skuPartNumber

正如 Jonathon Chase 所说,您可以使用/users('$myuser@myorg.org'(/licenseDetails 作为替代语法。

回答逃跑的问题 - 是的,这是可能的。如果你在前面再加一个$,它就会逃脱,你在行动中获得的值应该是只有一个的值。

/users/$$myuser@myord.org

最新更新