了解 Azure CloudTableClient:禁止 (403) 异常
Understanding Azure CloudTableClient: Forbidden(403) Exception
通过 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]&tn=[REMOVED]&sig=[REMOVED]&se=[REMOVED]&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.");
根据我的经验,403 错误表示它没有权限这样做。这意味着使用 Service (table) SAS 无权检查 table 是否存在。如果我们想检查 table 是否存在,我们需要存储帐户级别的 SAS 而不是服务 (table) SAS。更多信息请参考types of shared access signatures。虽然我们没有检查 table 是否存在的权限,但我们仍然拥有 SAS 分配的访问权限。我们也可以使用 table 查询来检索 table 条记录。例如var result = table.ExecuteQuery(new TableQuery {TakeCount =5})
;它会得到与常规浏览器类似的结果。
通过 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]&tn=[REMOVED]&sig=[REMOVED]&se=[REMOVED]&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.");
根据我的经验,403 错误表示它没有权限这样做。这意味着使用 Service (table) SAS 无权检查 table 是否存在。如果我们想检查 table 是否存在,我们需要存储帐户级别的 SAS 而不是服务 (table) SAS。更多信息请参考types of shared access signatures。虽然我们没有检查 table 是否存在的权限,但我们仍然拥有 SAS 分配的访问权限。我们也可以使用 table 查询来检索 table 条记录。例如var result = table.ExecuteQuery(new TableQuery {TakeCount =5})
;它会得到与常规浏览器类似的结果。