【发布时间】:2023-02-10 01:50:09
【问题描述】:
我正在尝试将数据存储在 ID 使用斜杠 (/) 的 Cosmos DB 中。然而,斜杠在 Cosmos ID 中是非法字符。我最初尝试通过 URL 编码斜杠 (%2F) 来解决这个问题,因为这是我通常通过 API 请求接收它们的形式。然而,虽然百分比 (%) 不是 ID 的非法字符,但 Cosmos 仍然无法检索 ID 中包含百分比的许多文档(它适用于某些文档,但如果 % 后跟某些字符它会出现)失败)。
是否有适用于 Cosmos DB ID 的编码,可以替换原始 ID 文本中的非法字符,而不会在编码的 ID 文本中引入非法或未处理的字符(如 %)?我宁愿远离像 Base64 这样的东西,这使得人们难以破译 ID。而且我还想避免简单的字符替换(/ 变成 -),以防 ID 使用替换字符。
【问题讨论】:
-
请参阅相关(重复)问题。 Tl;dr 不——你不能在 id 中使用任何非法字符。
-
我不想按原样使用非法字符。我正在尝试对文本进行编码以避免使用非法字符。我知道哪些字符是非法的(出于某种原因加上 %)。我在问是否有一种编码既可以替换非法字符又不会引入非法字符或未处理的字符,如百分号。
-
一种选择是使用 base64Url 编码。它产生的所有字符都是允许的,大多数语言都有它的实现。
-
@Mr.AJ 我添加了一个不幸的是不是通用的解决方案。但是在使用 ValueConverters 时并不会太痛苦。由于我在手机上,因此代码可能不完全正确。
标签: azure azure-cosmosdb azure-cosmosdb-sqlapi