2015-11-23 24 views
2

我试图检索连接字符串到Azure存储帐户,这是在config.json文件中以这种方式定义的(在使用解决方案添加它之后资源管理器选项 “添加连接的服务...”):检索连接字符串到ASP.NET 5/MVC中的Azure存储6

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

}

参加到微软的指令(与MVC 5行之有效)你这样做来获取连接字符串:

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

但CloudConfigurationManager.GetSetting(...)始终为空。 当调试,并在Inmediate窗口试过我得到这个输出呼叫:

?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的天蓝色存储与“添加连接的服务...”对话框保持一致?

回答

0

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

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

在ConfigureServices方法,如果您之前已经对你的AppSettings这种方式声明它。json:

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

注:您必须添加对Microsoft.Extensions.Configuration的引用以使此静态方法生效。

2

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

+0

所以我必须坚持ConfigurationManager呢? – Vi100

+0

我很困惑。你在使用新的配置系统吗? – davidfowl

+0

使用新的配置系统,我必须创建两个类并注册一个中间件来传递一个单独的配置参数...(以模拟config.json文件的结构,这与“添加连接的服务...” “选项)我不太喜欢,但似乎这是所有在ASP.NET 5中的方式,所有依赖注入,接口的奇迹......是否还有其他选择? – Vi100

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; } 
} 

增加它在ConfigureServices在Startup.cs,我把它放在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(); 
    } 
}