如何逃脱ODATA URI段起始美元符号($)

时间:2019-08-26 16:23:28

标签: c# odata

运行此查询:

  

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

结果:

  

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

经过一番摸索,我设法在myuser之前添加了第二个Dollarsign(%24)使其工作。

即使在https://docs.oasis-open.org/odata/odata/v4.0/errata02/os/complete/abnf/odata-abnf-construction-rules.txt,也似乎记录不清。

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

对于这些似乎没有记录的特殊情况,该文档是否应该得到改进?

2 个答案:

答案 0 :(得分:0)

如乔纳森·蔡斯(Jonathon Chase)所述,您可以使用/users('$myuser@myorg.org')/licenseDetails作为替代语法。

答案 1 :(得分:0)

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

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

/users('my-key-value')

然后,您可以按照以前尝试的方式,展开特定的导航属性并选择到特定的属性(假设实现与此相符),从而导致

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