Connecting Azure Blob with Azure Website

安稳与你 提交于 2019-12-03 12:25:40

问题


I'm trying to connect an Azure website to an Azure blob (where I intend to host some files in a container and then grab them from my website).

I started out with this tutorial: http://azure.microsoft.com/en-us/documentation/articles/web-sites-dotnet-get-started/

I deployed my website, and then started following this tutorial: http://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-blobs/#setup-connection-string

Since I was using an Azure website, I added the following code to my web.config file (under the WebApplication1 project). There is also a web.config file under the Views folder but I didn't modify that.

 <configuration>
    <appSettings>
       <add key="StorageConnectionString" 
            value="DefaultEndpointsProtocol=https;AccountName=account-name;AccountKey=account-key" />
    </appSettings>
 </configuration>

I followed all the steps in the tutorial and installed the relevant NuGet packages and then included these namespaces in my Controllers/HomeController.cs file:

using System.Configuration;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Auth;
using Microsoft.WindowsAzure.Storage.Blob;

Then I added the following statement in the ActionResult Index() method (which runs by default).

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.ConnectionStrings["StorageConnectionString"].ConnectionString);

When I try and run the solution, I now get this error:

I also tried directly putting the value of the StorageConnectionString (with my account name and key) instead of referencing to it in the following statement:

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.ConnectionStrings["DefaultEndpointsProtocol=https;AccountName=account-name;AccountKey=account-key"].ConnectionString);

I still get the same error. I can't seem to find anything on the internet. Any ideas?

Thanks!


回答1:


You have a fundamental mistake in your code.

First you set an AppSetting:

 <configuration>
    <appSettings>
       <add key="StorageConnectionString" 
            value="DefaultEndpointsProtocol=https;AccountName=account-   name;AccountKey=account-key" />
    </appSettings>
 </configuration>

Then you try to get a connection string:

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.ConnectionStrings["StorageConnectionString"].ConnectionString);

This will simply not work. When set AppSetting, you need to read AppSetting. When you set ConnectionString, you need to read Connection String.

So, the solution to be just keep the web.config as is, and change the line where you get storage account to:

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["StorageConnectionString"]);

Or keep your line for Connection strings but change web.config to:

 <configuration>
    <connectionStrings>
       <add name="StorageConnectionString" 
            connectionString="DefaultEndpointsProtocol=https;AccountName=account-   name;AccountKey=account-key" providerName="System.Data.SqlClient" />
    </connectionStrings>
 </configuration>

And of course, you have to put your real values for Cloud Storage account and Storage Account key (account-name will simply never work).




回答2:


This is more bad documentation from Azure, the article does indeed tell you to create an AppSetting and then the code tells you to retrieve a ConnectionString.

The alternative fix is to store the details as a ConnectionString and leave the code as is:

<add name="StorageConnectionString" connectionString="DefaultEndpointsProtocol=https;AccountName=your-account;AccountKey=your-key" />


来源:https://stackoverflow.com/questions/25679605/connecting-azure-blob-with-azure-website

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!