Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 指定在查询具有无效值的Azure表存储时ParitionKey或RowKey是否错误_C#_Repository_Azure Table Storage - Fatal编程技术网

C# 指定在查询具有无效值的Azure表存储时ParitionKey或RowKey是否错误

C# 指定在查询具有无效值的Azure表存储时ParitionKey或RowKey是否错误,c#,repository,azure-table-storage,C#,Repository,Azure Table Storage,我的存储库中有从Azure表存储获取数据的方法 TableOperation retrieveOperation = TableOperation.Retrieve<T>(partitionKey, rowKey); TableResult result = await table.ExecuteAsync(retrieveOperation); return result.Result as T; TableOperation retrieveOperation=TableOpe

我的存储库中有从Azure表存储获取数据的方法

TableOperation retrieveOperation = TableOperation.Retrieve<T>(partitionKey, rowKey);
TableResult result = await table.ExecuteAsync(retrieveOperation);
return result.Result as T;
TableOperation retrieveOperation=TableOperation.Retrieve(partitionKey,rowKey);
TableResult结果=等待table.ExecuteAsync(检索操作);
返回结果,结果为T;
若任何参数不存在,则结果不包含任何有关它的信息

问题是-在不额外查询数据库的情况下,是否可以确定客户端提供了错误的分区键或行键?由于我的数据库结构,我应该通知API使用者哪些值无效

编辑:我想到的唯一一件事是创建一个单独的表来存储所有的分区键,并在执行适当的查询之前查询这个表,但这将导致执行我希望避免的额外查询

在不额外查询数据库的情况下,是否可以确定客户端是否提供了错误的分区键或行键

据我所知,Azure storage SDK或中的操作中没有内置方法可用于检查客户端提供的分区键或行键是否有效


您可以尝试在程序中编写自己的验证方法,以检查分区键或行键的给定值是否有效(检查分区键或行键值是否包含键字段中不允许的任何字符,以及检查键字段的值是否小于1kb)。您可以检查以获取有关“关键字段中不允许的字符”和“支持的属性类型”的详细信息

您可以使用如下方法来检测分区键或行键是否包含无效/不允许的字符:

public static readonly Regex DisallowedCharsInTableKeys = new Regex(@"[\\\\#%+/?\u0000-\u001F\u007F-\u009F]");
检测到无效的表分区和行键:

bool invalidKey = DisallowedCharsInTableKeys.IsMatch(tableKey);
如果
invalidKey
为true,则可以在将查询发送到表存储之前向客户端返回正确的响应