了解Azure CloudTableClient:禁止(403)例外

时间:2016-11-07 18:57:42

标签: c# azure azure-table-storage

通过Azure存储资源管理器读取访问权限或常规浏览器适用于现有SAS令牌。控制台访问正在抛出Forbidden(403)异常。

引用的appconfig的代码如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
    </startup>
    <appSettings>
      <add key="SASToken" value="sv=[REMOVED]&amp;tn=[REMOVED]&amp;sig=[REMOVED]&amp;se=[REMOVED]&amp;sp=r" />
    </appSettings>
</configuration>

控制台应用程序的代码如下:

StorageCredentials accountSAS = new StorageCredentials(CloudConfigurationManager.GetSetting("SASToken"));
CloudStorageAccount accountWithSAS = new CloudStorageAccount(storageCredentials: accountSAS, accountName: "acccount-name",  endpointSuffix: "core.windows.net", useHttps: true);
CloudTableClient tableClient = accountWithSAS.CreateCloudTableClient();
CloudTable table = tableClient.GetTableReference("TableName");

if (table.Exists() == true)
{
    Console.WriteLine("Table Exists.");
}
else
    Console.WriteLine("Table Does not Exist.");

1 个答案:

答案 0 :(得分:1)

根据我的经验,403错误表示它没有权限这样做。这意味着Service(table)SAS无权检查表是否存在。如果我们想检查表是否存在,我们需要存储帐户级SAS,而不是服务(表)SAS。更多信息请参阅types of shared access signatures。虽然我们无权检查表是否存在,但我们仍然具有SAS分配的访问权限。我们也可以使用表查询来检索表记录。例如var result = table.ExecuteQuery(new TableQuery {TakeCount =5});它将获得与常规浏览器类似的结果。