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

How to escape odata uri segment starting dollar sign ($)

运行 这个查询:

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

结果:

"The request URI is not valid. Since the segment 'users' refers to a collection, this must be the last segment in the request URI or it must be followed by an function or action that can be bound to it otherwise all intermediate segments must refer to a single resource"

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

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

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

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

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

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

由于您使用实体密钥访问特定实体然后导航至其导航属性之一,因此您通常可以直接在实体的括号内提供密钥。如果您没有复合键,这很简单,看起来像这样:

/users('my-key-value')

然后您可以按照与之前尝试相同的方式将特定导航 属性 和 select 向下扩展到特定属性(假设实现符合此要求),从而导致

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