从Azure函数中的配置文件加载连接字符串

off*_*cer 9 c# azure azure-functions

在我的Azure函数中,我正在使用一个库,它通过ConfigurationManager中的ConnectionString建立与SQL服务器的连接,如下所示:

var cs = System.Configuration.ConfigurationManager.ConnectionStrings["DbConString"].ConnectionString;
DbConnection connection = new SqlConnection(cs);
Run Code Online (Sandbox Code Playgroud)

现在,当我通过应用程序设置在门户中设置连接字符串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..." 
    } 
  }
}
Run Code Online (Sandbox Code Playgroud)

但是我无法通过ConfigurationManager访问"DbConStr1".像描述"的ConnectionStrings"中添加"DbConStr2" 这里会导致编译错误.也许是因为我没有使用.NET Core?

Edit2:我搞砸了"ConnectionStrings"的嵌套.它必须与"值"处于相同的嵌套级别:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "",
    "AzureWebJobsDashboard": "",
    "MyServiceBusReader": "Endpoint=sb://xxxx="
  },
  "ConnectionStrings": {
    "DbConStr": "data source=(localdb)\\MS..." 
  }
}
Run Code Online (Sandbox Code Playgroud)

Isr*_*ron 5

添加文件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"      
    }
}
Run Code Online (Sandbox Code Playgroud)

在C#代码中使用:

private readonly static string tenantId = ConfigurationManager.AppSettings["tenantId"];
Run Code Online (Sandbox Code Playgroud)


rea*_*abh 5

// C# Environment Variables example for Azure Functions v1 or v2 runtime
// This works all the way up to but not including .NET Core 2.0
var clientId = Environment.GetEnvironmentVariable("ClientId");
var clientSecret = Environment.GetEnvironmentVariable("ClientSecret");
var aadDomain = Environment.GetEnvironmentVariable("AADDomain");
Run Code Online (Sandbox Code Playgroud)

请记住,您在 local.settings.json 中所做的设置不会反映在 azure 中。请在 Azure 门户的应用设置中添加您的值,请点击链接 - https://docs.microsoft.com/en-us/azure/azure-functions/functions-how-to-use-azure-function-app-settings


off*_*cer 2

问题是,从例如Web.config文件中已知的连接字符串由两部分组成:

  • 连接字符串本身和
  • 提供者名称。

但由于配置文件使用 JSON 格式,因此无法指定这两个参数。

在提出问题时,无法在appsetings.json(现已重命名为local.settings.json)中设置提供商名称。但 Azure Functions 团队对此进行了更改,并为providerNameto设置了默认值System.Data.SqlClient,从而解决了问题。

默认providerNameSystem.Data.SqlClient. 您不必手动设置它。只需添加您的连接字符串X并通过 读取它ConfigurationManager.ConnectionStrings["X"]

  • 您能否提供一些代码或链接来准确地向我们展示这是如何实现的? (7认同)
  • 怎么实现的?`providerName` 默认为 `System.Data.SqlClient`。您不必手动设置它。只需添加连接字符串 _X_ 并通过 ConfigurationManager.ConnectionStrings["X"] 读取它 (2认同)