从Azure函数中的配置文件加载连接字符串
在我的Azure函数中,我正在使用一个库,它通过ConfigurationManager中的ConnectionString建立与SQL服务器的连接,如下所示:
var cs = System.Configuration.ConfigurationManager.ConnectionStrings["DbConString"].ConnectionString; DbConnection connection = new SqlConnection(cs);
现在,当我通过应用程序设置在门户中设置连接字符串DbConString时,一切正常。 但是对于本地开发,我使用azure-functions-cli,不幸的是我不知道应该在哪里放置连接字符串以通过ConfigurationManager正确加载它。
我试图将它放在appsettings.json文件中,但没有成功。
编辑:我的appsettings.json目前看起来像这样:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "", "AzureWebJobsDashboard": "", "MyServiceBusReader": "Endpoint=sb://xxxx=", "DbConStr1": "data source=(localdb)\\MSSQLLocalDB;initial catalog=MyDb;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework", "ConnectionStrings": { "DbConStr2": "data source=(localdb)\\MS..." } } }
但是我无法通过ConfigurationManager访问“DbConStr1”。 如此处所述,在“ConnectionStrings”中添加“DbConStr2”会导致编译错误。 也许是因为我没有使用.NET Core?
Edit2:我搞砸了“ConnectionStrings”的嵌套。 它必须与“值”处于相同的嵌套级别:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "", "AzureWebJobsDashboard": "", "MyServiceBusReader": "Endpoint=sb://xxxx=" }, "ConnectionStrings": { "DbConStr": "data source=(localdb)\\MS..." } }
我有同样的问题,并使用.net标准(而不是核心)。 我将我的设置添加到Azurefunction的应用程序设置部分(在Azure门户中): –
然后我下载了一个function的拉链: –
此下载包含local.settings.json的副本,其中包含正确json格式的应用程序设置。 然后我通过ConfigurationManager.Appsettings [“mysetting”]访问它们
添加文件local.setting.json
{ { "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "AzureWebJobsDashboard": "UseDevelopmentStorage=true", "tenantId": "You tenantId", "resource": "https://management.azure.com/", "ClientSecret": "You ClientSecret, Key from App Registry", "ClientId": "You ClientId, Application ID from App registry", "subscriptionId": "You subscriptionId", "resourceGroupName": "Your resourceGroupName", "serverName": " Your SQL Server", "databaseNameDW": "Your Database", "apiversion": "2017-10-01-preview" } }
在C#代码中使用:
private readonly static string tenantId = ConfigurationManager.AppSettings["tenantId"];
您应该能够使用项目结构中的appsettings.json
文件管理配置设置。 您可以在此处查看Azure Functions的文件夹结构示例。
此外, 此链接将提供有关如何使用.NET Core管理配置设置的一些详细信息。
问题是,从Web.config
文件中Web.config
的连接字符串由两部分组成:
- 连接字符串本身和
- 提供者名称。
但由于配置文件使用JSON格式,因此无法指定这两个参数。
在询问问题时,无法在appsetings.json
设置提供程序名称(现在已重命名为local.settings.json
)。 但Azure-Functions-team更改了此项并将providerName
的默认值设置为System.Data.SqlClient
,从而解决了该问题。
providerName
默认为System.Data.SqlClient
。 您不必手动设置它。 只需添加连接字符串X并通过ConfigurationManager.ConnectionStrings["X"]
读取它。