Программно извлекать свойства из строки подключения хранилища BLOB-объектов Azure - PullRequest
2 голосов
/ 02 апреля 2020

Имеется строка подключения хранилища BLOB-объектов, например:

DefaultEndpointsProtocol = https; AccountName = foo; AccountKey = bar; EndpointSuffix = core. windows. net

Существует ли известный объект Microsoft, в который его можно преобразовать / десериализовать? Я не хочу на самом деле анализировать строку, но мне нужно извлечь AccountName и AccountKey из всей строки подключения, которая у меня есть в виде строки.

Чтобы исключить возможность "Почему вы хотите сделай это?" вопросы ... У меня есть существующий класс, который требует, чтобы строка подключения была введена как строка. Чтобы избежать серьезных изменений, я не могу это изменить. Но мне нужно добавить некоторые методы в этот класс, которые требуют AccountName и AccountKey как отдельные элементы.

Спасибо!

Ответы [ 3 ]

3 голосов
/ 02 апреля 2020

Если вы установите Microsoft.Azure.Storage.Common, вы можете программно извлечь несколько битов строки подключения, не разбирая строку подключения самостоятельно.

Например (с запутанной фактической информацией):

using System;
using Microsoft.Azure.Storage;

namespace dotnet_connectionstring
{
    class Program
    {
        static void Main(string[] args)
        {
            CloudStorageAccount storageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=youraccount;AccountKey=yourkey==;EndpointSuffix=core.windows.net");
            Console.WriteLine(storageAccount.BlobEndpoint);
            Console.WriteLine("---");
            Console.WriteLine(storageAccount.BlobStorageUri);
            Console.WriteLine("---");
            Console.WriteLine(storageAccount.Credentials.AccountName);
            Console.WriteLine("---");
            Console.WriteLine(storageAccount.Credentials.ExportBase64EncodedKey());
        }
    }
}

Это дает что-то вроде:

https://youraccount.blob.core.windows.net/
---
Primary = 'https://youraccount.blob.core.windows.net/'; Secondary = 'https://youraccount-secondary.blob.core.windows.net/'
---
youraccount
---
yourkey==
3 голосов
/ 02 апреля 2020

Я не знаю классов, которые бы делали это, но не было бы так сложно превратить их в словарь. Пример ниже.

        string connString = "DefaultEndpointsProtocol=https;AccountName=foo;AccountKey=bar;EndpointSuffix=core.windows.net";

        var connStringArray = connString.Split(';');

        var dictionary = new Dictionary<string, string>();

        foreach (var item in connStringArray)
        {
            var itemKeyValue = item.Split('=');
            dictionary.Add(itemKeyValue[0], itemKeyValue[1]);
        }

Затем вы можете получить доступ к нужным значениям, используя это.

dictionary["AccountName"]
dictionary["AccountKey"]
2 голосов
/ 02 апреля 2020

Для этого у нас есть CloudStorageAccount тип.

CloudStorageAccount sa = CloudStorageAccount.Parse(connString);

и StorageConnectionString от Microsoft. Azure .Storage.Common Nuget

...