2015-11-23 25 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(); 
    } 
}