具有自定义端点后缀的 Azure 云存储帐户

Azure cloud storage account with custom endpoint suffix

想象一下,我们有 2 个 Azure 存储帐户,其中一个是常规帐户,另一个是政府(或德国、中国等)。 以下是我们如何创建 CloudBlobClient:

    private const string ConnectionStringTemplate = "DefaultEndpointsProtocol={0};AccountName={1};AccountKey={2};";

    public static CloudBlobClient Create(string protocol, string accountName, string accountKey)
    {
        var connectionString = string.Format(CultureInfo.InvariantCulture, ConnectionStringTemplate, protocol, accountName, accountKey);
        var account = CloudStorageAccount.Parse(connectionString);

        return account.CreateCloudBlobClient();
    }

此代码适用于普通帐户,但不适用于政府帐户。我们应该指定 EndpointSuffix(core.usgovcloudapi.net 而不是默认的 core.windows.net),连接字符串应该是这样的:

"DefaultEndpointsProtocol={0};AccountName={1};AccountKey={2};EndpointSuffix={3}";

那么,问题来了,如果只有AccountName和AccountKey,我怎么知道是哪个账号呢?是否有一些 API 方法来检查它们的帐户类型或端点后缀?

So, the question is, how can I know which account is if have only AccountName and AccountKey? Is there some API method to check account type or endpoint suffix for them?

截至今天,还没有 API 可以这样做。您可以做的一件事是使用您拥有的信息创建 CloudStorageAccount 的实例并尝试列出 blob 容器。

假设存在同名的存储帐户,并且帐户 name/key 组合正确,那么您应该能够看到 blob 容器列表。如果帐户 name/key 组合不正确,则存储服务将 return 403 错误。

由于您的目的只是检查帐户 name/key 组合,您可以要求存储服务 return 仅 1 个 blob 容器以减少响应数据并加快操作。

没有这样的 API 可以做到这一点,因为您的帐户跨越不同的云,而 Azure APIs 总是在一个云中服务。实际上,您甚至可以在不同的云中创建同名帐户。因此,您需要自己维护 "account, cloud name (public Azure/China/Germany Gov)" 映射。 :)