在 ASP.NET 5 / MVC 6 中检索到 Azure 存储的连接字符串

Retrieve connection string to Azure storage in ASP.NET 5 / MVC 6

我正在尝试检索 Azure 存储帐户的连接字符串,该帐户以这种方式在 config.json 文件中定义(在使用解决方案资源管理器选项 "Add connected service..." 添加后):

"MicrosoftAzureStorage": {
    "almacen_AzureStorageConnectionString": "DefaultEndpointsProtocol=https;AccountName=almacen;AccountKey=pLrQwW......"

}

按照 Microsoft 说明(与 MVC 5 配合良好)执行此操作以检索连接字符串:

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("almacen_AzureStorageConnectionString"));

但 CloudConfigurationManager.GetSetting(...) returns 始终为空。 在中间 window 中调试和尝试时,我得到以下调用输出:

?CloudConfigurationManager.GetSetting("almacen_AzureStorageConnectionString")
Exception thrown: "System.IO.FileNotFoundException" in mscorlib.dll
Exception thrown: "System.IO.FileNotFoundException" in mscorlib.dll
Getting "almacen_AzureStorageConnectionString" from ServiceRuntime: FAIL.
Getting "almacen_AzureStorageConnectionString" from ConfigurationManager: FAIL.

我使用的是 RC1 版本,并且包含了对 Microsoft.Extensions.Configuration 和 Microsoft.Extensions.Configuration.Json 包的引用。

编辑

对于下面的评论,我假设 CloudConfigurationManager 不可能从 config.json... config.json 中的 azure 存储以 "Add connected service..." 对话框留下的方式?

CloudConfigurationManager 不理解 config.json。您正在使用 2 个不同的配置系统。

大卫确实回答了你的问题,哈哈哈。但是,是的,恕我直言,所有这些 DI 对于小型项目来说都是疯狂的,但这是新常态。 (这在几个不同的地方得到了回答,随着各种测试版它发生了一些变化)使用 RC1 这是我所做的:

settings.json

中的连接字符串
"MicrosoftAzureStorage": {
    "xxxxxx_AzureStorageConnectionString": "DefaultEndpointsProtocol=https;AccountName=xxxxxx;AccountKey=SuperSecretKey==;BlobEndpoint=https://xxxxxx.blob.core.windows.net/"
}

创建了一个名为 AzureSettings

的 class
public class AzureSettings
{
    public string xxxxxx_AzureStorageConnectionString { get; set; }
}

在Startup.cs里加在ConfigureServices里,我在AddMvc()

后面加了
services.Configure<AzureSettings>(Configuration.GetSection("MicrosoftAzureStorage"))

然后在我的控制器中

public class MyController : Controller
{
    private string _AzureConnectionString;

    public ImagesController(IOptions<AzureSettings> settings)
    {
        _AzureConnectionString = settings.Value.xxxxxx_AzureStorageConnectionString;
    }

然后这部分应该看起来很眼熟 ;)

// GET: /<controller>/
public IActionResult Index()
{
    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
    _AzureConnectionString);

    // Create a blob client.
    CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

    // Do stuff

    return View();
    }
 }

有点晚了,但自从我提出这个问题后,有人认为实现一种更简单的方法来检索连接字符串是明智的。所以我会回答我自己的问题,因为现在你可以这样做:

string conn = Configuration.GetConnectionString("ExampleConnection");

在 ConfigureServices 方法中,如果您以前在 appsettings.json 上以这种方式声明它:

"ConnectionStrings": {
    "ExampleConnection": "blah,blah..."
},

注意:您必须添加对 Microsoft.Extensions.Configuration 的引用才能使此静态方法起作用。