gpt4 book ai didi

azure - Cosmos DB ID 是否可以接受编码来替换非法字符?

转载 作者:行者123 更新时间:2023-12-02 22:57:58 25 4
gpt4 key购买 nike

我尝试将数据存储在 Cosmos DB 中,其中 ID 使用斜杠 (/)。然而,斜杠在 Cosmos ID 中是非法字符。我最初尝试通过 URL 编码斜杠 (%2F) 来解决此问题,因为这是我通常通过 API 请求接收它们的形式。然而,尽管百分比 (%) 对于 ID 来说并不是非法字符,但 Cosmos 仍然对它们无法检索许多 ID 中含有百分比的文档感到窒息(它对某些文档有效,但如果 % 后面跟有某些字符,则会出现这种情况)失败)。

是否有一种适合 Cosmos DB ID 的编码可以替换原始 ID 文本中的非法字符,而不会在编码的 ID 文本中引入非法或未处理的字符(例如 %)?我宁愿远离 Base64 之类的东西,因为它会使人们很难破译 ID。而且我还希望避免简单的字符替换(/变为 -),以防 ID 使用替换字符。

最佳答案

我最终进行了简单的字符替换,将斜杠 (/) 替换为竖线 (|)。

让这里变得宜居的关键是使用 EntityFramework 添加一个值转换器。

Expression<Func<string?, string>> toDB = v => v!.Replace("/", "|");
Expression<Func<string, string?>> fromDB = v => v!.Replace("|", "/");
builder.Property(p => p.Id).HasConversion(toDB, fromDB);

这允许在读取和写入数据库时​​自动进行字符替换。您唯一需要担心差异的情况是您是直接访问数据库还是从其他代码而不使用转换器访问数据库。或者可能进行自定义搜索。我手动为我们使用的过滤框架进行翻译,我怀疑其他 id 搜索解决方案也需要相同的手动翻译。

最终我认为这是可以接受的,因为我们不太可能有其他需要翻译的字符,翻译很容易在视觉上完成,并且在大多数情况下使用 ValueConverters 是透明的。但这并不是适用于任何可能的字符串 id 的通用解决方案。

编辑:再想一想,这个解决方案是有缺陷的。 Cosmos 实际上允许创建 ID 中含有非法字符的文档,只是不允许轻松访问或删除它们。理想的解决方案应该全面阻止所有非法字符,无论是否预期。

关于azure - Cosmos DB ID 是否可以接受编码来替换非法字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73098855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com