从 Uri 和 BlobServiceClient 创建 Azure BlobClient
Creating Azure BlobClient from Uri and BlobServiceClient
在 Azure 存储 v12 SDK 中,如何使用 Blob URI 和 BlobServiceClient 创建 blob 客户端?
在 v11 中,我们可以通过以下方式做到这一点:
var cloudBlockBlob = new CloudBlockBlob(<Blob URI>, <Cloud Blob Client>);
我已经设法通过以下 hacky 方式做到这一点,我必须通过最初创建 blobClient 对象来获取容器和客户端名称。我无法使用初始客户端访问 blob,因为我收到 AuthenticationFailed
错误。
var sasUri = _blobServiceClient.GenerateAccountSasUri(
AccountSasPermissions.Read, DateTimeOffset.UtcNow.AddDays(10),
AccountSasResourceTypes.Object);
var sasCredential = new AzureSasCredential(sasUri.ToString());
// this is not valid as I get an Authentication Exception if I try to access from here
var blobClient = new BlobClient(blobUri, sasCredential);
BlobContainerClient blobContainerClient =
_blobServiceClient.GetBlobContainerClient(blobClient.BlobContainerName);
blobClient = blobContainerClient.GetBlobClient(blobClient.Name);
BlobDownloadInfo blobDownloadInfo = await blobClient.DownloadAsync(cancellationToken);
我很确定我在这里做错了什么并且有更好的方法来做到这一点。我怎样才能在 v12 中正确实现这一点?
只需更改这行代码:
var sasCredential = new AzureSasCredential(sasUri.ToString());
至
var sasCredential = new AzureSasCredential(sasUri.ToString().Split('?')[1]);
Ivan 的回答是正确的。本质上问题是 AzureSasCredential
需要 SAS 令牌而不是 URL.
另一种从 SAS URL 获取令牌的方法是:
var sasCredential = new AzureSasCredential(sasUri.Query);
在 Azure 存储 v12 SDK 中,如何使用 Blob URI 和 BlobServiceClient 创建 blob 客户端?
在 v11 中,我们可以通过以下方式做到这一点:
var cloudBlockBlob = new CloudBlockBlob(<Blob URI>, <Cloud Blob Client>);
我已经设法通过以下 hacky 方式做到这一点,我必须通过最初创建 blobClient 对象来获取容器和客户端名称。我无法使用初始客户端访问 blob,因为我收到 AuthenticationFailed
错误。
var sasUri = _blobServiceClient.GenerateAccountSasUri(
AccountSasPermissions.Read, DateTimeOffset.UtcNow.AddDays(10),
AccountSasResourceTypes.Object);
var sasCredential = new AzureSasCredential(sasUri.ToString());
// this is not valid as I get an Authentication Exception if I try to access from here
var blobClient = new BlobClient(blobUri, sasCredential);
BlobContainerClient blobContainerClient =
_blobServiceClient.GetBlobContainerClient(blobClient.BlobContainerName);
blobClient = blobContainerClient.GetBlobClient(blobClient.Name);
BlobDownloadInfo blobDownloadInfo = await blobClient.DownloadAsync(cancellationToken);
我很确定我在这里做错了什么并且有更好的方法来做到这一点。我怎样才能在 v12 中正确实现这一点?
只需更改这行代码:
var sasCredential = new AzureSasCredential(sasUri.ToString());
至
var sasCredential = new AzureSasCredential(sasUri.ToString().Split('?')[1]);
Ivan 的回答是正确的。本质上问题是 AzureSasCredential
需要 SAS 令牌而不是 URL.
另一种从 SAS URL 获取令牌的方法是:
var sasCredential = new AzureSasCredential(sasUri.Query);