如何转义以美元符号 ($) 开头的 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

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

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


郎朗坤
浏览 84回答 3
3回答

繁星淼淼

OData URL 中的前缀$通常表示您将要使用系统查询选项,例如$filter、$select或$expand。这可能会导致您的密钥被这样解释。由于您使用实体键来访问特定实体,然后导航到其导航属性之一,因此您通常可以直接在实体的括号内提供键。当您没有组合键时,这很简单,如下所示:/users('my-key-value')然后,您可以按照您之前尝试的相同方式展开特定的导航属性并选择特定的属性(假设实现符合此要求),从而导致/users('$myuser@myorg.org')/licenseDetails?$select=skuId,skuPartNumber

哆啦的时光机

您可以使用 /users('$myuser@myorg.org')/licenseDetails 作为替代语法。

拉丁的传说

回答逃跑的问题——是的,这是可能的。如果你$在前面添加另一个,它就会逃逸,并且你在操作中获得的值应该是只有一个的值。/users/$$myuser@myord.org
打开App,查看更多内容
随时随地看视频慕课网APP