在 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 的引用才能使此静态方法起作用。
我正在尝试检索 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
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 的引用才能使此静态方法起作用。