N.a*_*ham 5 c# azure azure-storage azure-storage-blobs
我在我的 C# web 应用程序中编写了一个从 Azure 存储帐户中删除旧 blob 的方法。
这是我的代码:
public void CleanupIotHubExpiredBlobs()
{
const string StorageAccountName = "storageName";
const string StorageAccountKey = "XXXXXXXXXX";
const string StorageContainerName = "outputblob";
string storageConnectionString = string.Format("DefaultEndpointsProtocol=https;AccountName={0};AccountKey={1}", StorageAccountName, StorageAccountKey);
// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(storageConnectionString);
// Create the blob client.
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
// select container in which to look for old blobs.
CloudBlobContainer container = blobClient.GetContainerReference(StorageContainerName);
// set up Blob access condition option which will filter all the blobs which are not modified for X (this.m_CleanupExpirationNumOfDays) amount of days
IEnumerable<IListBlobItem> blobs = container.ListBlobs("", true);
foreach (IListBlobItem blob in blobs)
{
CloudBlockBlob cloudBlob = blob as CloudBlockBlob;
Console.WriteLine(cloudBlob.Properties);
cloudBlob.DeleteIfExists(DeleteSnapshotsOption.None, AccessCondition.GenerateIfNotModifiedSinceCondition(DateTime.Now.AddDays(-1 * 0.04)), null, null);
}
LogMessageToFile("Remove old blobs from storage account");
}
Run Code Online (Sandbox Code Playgroud)
如您所见,为了实现该方法必须接收 StorageAccountName 和 StorageAccountKey 参数。
一种方法是在配置文件中配置这些参数供应用程序使用,但这意味着用户必须手动将这两个参数插入到配置文件中。
我的问题是:有没有一种方法可以在我的代码中以编程方式检索这些参数中的至少一个,以便至少用户只需插入一个参数而不是两个?我的目标是让用户的生活更轻松。
我的问题是:是否有一种方法可以在我的代码中以编程方式检索至少一个参数,以便用户至少只需插入一个参数而不是两个?我的目标是让用户的生活更轻松。
根据您的描述,我建议您可以使用azure rest api通过帐户名获取存储帐户密钥。
此外,我们还可以使用rest api列出所有资源组的存储帐户名称,但仍然需要将资源组名称作为参数发送到azure管理url。
您可以将请求发送到 azure 管理,如下网址:
POST: https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resrouceGroupName}/providers/Microsoft.Storage/storageAccounts/{storageAccountName}/listKeys?api-version=2016-01-01
Authorization: Bearer {token}
Run Code Online (Sandbox Code Playgroud)
更多详细信息,您可以参考以下代码:
注意:使用这种方式,您需要首先创建一个Azure Active Directory应用程序和服务主体。生成服务主体后,您可以获得applicationid、access key和talentid。更多详细信息,您可以参考这篇文章。
代码:
string tenantId = " ";
string clientId = " ";
string clientSecret = " ";
string subscription = " ";
string resourcegroup = "BrandoSecondTest";
string accountname = "brandofirststorage";
string authContextURL = "https://login.windows.net/" + tenantId;
var authenticationContext = new AuthenticationContext(authContextURL);
var credential = new ClientCredential(clientId, clientSecret);
var result = authenticationContext.AcquireTokenAsync(resource: "https://management.azure.com/", clientCredential: credential).Result;
if (result == null)
{
throw new InvalidOperationException("Failed to obtain the JWT token");
}
string token = result.AccessToken;
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(string.Format("https://management.azure.com/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Storage/storageAccounts/{2}/listKeys?api-version=2016-01-01", subscription, resourcegroup, accountname));
request.Method = "POST";
request.Headers["Authorization"] = "Bearer " + token;
request.ContentType = "application/json";
request.ContentLength = 0;
//Get the response
var httpResponse = (HttpWebResponse)request.GetResponse();
using (System.IO.StreamReader r = new System.IO.StreamReader(httpResponse.GetResponseStream()))
{
string jsonResponse = r.ReadToEnd();
Console.WriteLine(jsonResponse);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2698 次 |
| 最近记录: |