.NET 6中BlobClient的AccountName属性返回空字符串问题求助
解决方案
当使用凭据(如DefaultAzureCredential)创建BlobClient时,AccountName属性为空是因为该方式下客户端不会自动从服务Uri中解析账户名并填充到属性中;而连接字符串方式会直接从连接字符串里提取账户名存入属性,所以能正常返回。
以下是几种可行的解决办法:
1. 从BlobClient的Uri中解析账户名
存储账户的Blob服务Uri格式通常为https://<accountname>.blob.core.windows.net/...,可以通过拆分Uri的主机名来获取账户名:
// 初始化BlobClient var blobClient = new BlobClient( new Uri("https://youraccount.blob.core.windows.net/yourcontainer/yourblob"), new DefaultAzureCredential() ); // 解析账户名 string accountName = blobClient.Uri.Host.Split('.')[0];
2. 通过BlobServiceClient获取账户名后创建BlobClient
BlobServiceClient使用凭据初始化时(指定服务Uri),可以正确获取AccountName属性,之后再通过它创建BlobClient:
// 初始化BlobServiceClient var blobServiceClient = new BlobServiceClient( new Uri("https://youraccount.blob.core.windows.net"), new DefaultAzureCredential() ); // 获取账户名 string accountName = blobServiceClient.AccountName; // 创建BlobClient var blobClient = blobServiceClient.GetBlobClient("yourcontainer/yourblob");
3. 提前存储账户名并复用
如果业务中已经提前知晓存储账户名,可以直接将其存入变量复用,无需从客户端实例提取:
string accountName = "youraccount"; var blobClient = new BlobClient( new Uri($"https://{accountName}.blob.core.windows.net/yourcontainer/yourblob"), new DefaultAzureCredential() );
内容的提问来源于stack exchange,提问作者mustafa.salaheldin
相关产品推荐
相关产品推荐

