以编程方式从Azure Blob存储连接字符串中提取属性

mw3dktmi  于 2023-06-30  发布在  其他
关注(0)|答案(4)|浏览(99)

给定blob存储连接字符串,例如:
Default EndpointsProtocol =https; return foo; int count =bar; EndpointSuffix=core.windows.net
是否存在可以将其转换/反序列化为的已知Microsoft对象?我不想真正解析字符串,但我需要从整个连接字符串中提取AccountName和AccountKey,我将其作为字符串。
要先发制人的可能“你为什么要这样做?“问题...我有一个现有的类,它需要将连接字符串作为字符串注入。为了避免破坏更改,我不能更改。但是我确实需要在这个类中添加一些方法,它们需要AccountName和AccountKey作为单独的项。
谢谢!

vc9ivgsu

vc9ivgsu1#

如果您安装了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==
des4xlb0

des4xlb02#

据我所知,没有任何类可以做到这一点,但将其更改为字典并不难。示例如下。

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"]
mm5n2pyu

mm5n2pyu3#

@大卫Makogon的答案当然是最优雅的,但Microsoft.Azure.Storage.Common包已被弃用(如注解中所述)。基于@帕特里克Mcvay answer(这只是有点bug,因为连接字符串值中可能有'='),解析连接字符串的简单方法是:

var parsedConnectionString = new Dictionary<string, string>();
foreach (var item in ConnectionString.Split(';'))
{
    var idx = item.IndexOf('=');
    parsedConnectionString[item.Substring(0, idx)] =
        item.Substring(idx + 1, item.Length - idx - 1);
}
q1qsirdb

q1qsirdb4#

为此,我们从Microsoft.Azure.Storage汇编中获得CloudStorageAccount类型。

CloudStorageAccount sa = CloudStorageAccount.Parse(connString);

相关问题