如何编码URI以安全地存储在TableServiceEntity的RowKey中?

Jam*_*mes 7 url uri azure-storage azure-table-storage

我真的非常希望将URI存储为Azure表存储中的RowKey值.根据文档,RowKeys不能包含URI中常见的字符(/,\,#,?).

解决方案似乎很简单:只需编码URI即可.但这不起作用.无论出于何种原因,可以插入包含序列 %2f(正斜杠的编码值)的任何值,但不会查询,即使'%2f'不包含任何禁用字符.

好的,那么base64编码怎么样?不.它产生偶尔的正斜杠字符,这是不允许的.

那么有一种编码字符串(URI)的方法可以可靠地存储为Azure表中的RowKey吗?优选地,但不是必须地,人类可读的东西.

Bri*_*chl 0

有几种可能性:

  1. 使用某种特定编码(例如,UTF-8)转换字节,然后将字节编码为十六进制。用它作为钥匙。但是,某些 URI 可能非常长,并且键会更长,因此您可能会遇到 RowKey 的最大长度。
  2. 对 URI 进行哈希处理(例如,使用 MD5)。对这些字节进行十六进制编码并将它们用作密钥。请注意,存在冲突的可能性,但您的 PartitionKey 可能会消除这种可能性。由于哈希值的长度是恒定的,因此最大 RowKey 长度不会有问题。

我确信还有其他想法,我很想听听。