C# Azure函数无法读取应用程序设置和连接字符串

C# Azure函数无法读取应用程序设置和连接字符串,c#,azure,azure-functions,C#,Azure,Azure Functions,我在Azure中创建了一个HTTP触发器函数,希望从Azure SQL数据库读取数据。我在函数应用程序的连接字符串部分配置了连接字符串,如下图所示 我使用下面的代码尝试读取连接字符串 var cnnString = ConfigurationManager.ConnectionStrings["TempleDataContext"].ConnectionString; 执行时,我在日志中看到以下错误 2018-10-24T18:13:56.385[信息]函数“donors1”的脚本 改变。重

我在Azure中创建了一个HTTP触发器函数,希望从Azure SQL数据库读取数据。我在函数应用程序的连接字符串部分配置了连接字符串,如下图所示

我使用下面的代码尝试读取连接字符串

var cnnString = ConfigurationManager.ConnectionStrings["TempleDataContext"].ConnectionString;
执行时,我在日志中看到以下错误

2018-10-24T18:13:56.385[信息]函数“donors1”的脚本 改变。重新加载。2018-10-24T18:13:56.601[信息]汇编 成功。2018-10-24T18:13:58.511[信息]执行 'Functions.donors1'(Reason='此函数是通过编程方式调用的 通过主机API’,Id=8b140087-4b50-450e-829c-f7abd9e3a1eb) 2018-10-24T18:13:59.067[信息]C#HTTP触发函数 处理了一个请求。2018-10-24T18:13:59.245[错误]已执行 “函数.donors1”(失败,Id=8b140087-4b50-450e-829c-f7abd9e3a1eb) 对象引用未设置为对象的实例

我想测试ConnectionString对象返回的所有内容,并将代码更改为

var cnnStrings = ConfigurationManager.ConnectionStrings;
    foreach(var c in cnnStrings)
    {
        log.LogInformation(c.ToString());
    }
当我查看日志时,这是我看到的信息

2018-10-24T18:16:53.755[信息]函数“donors1”的脚本 改变。重新加载。2018-10-24T18:16:54.540[信息]汇编 成功。2018-10-24T18:16:55.917[信息]执行 'Functions.donors1'(Reason='此函数是通过编程方式调用的 通过主机API,Id=508c49bf-d5e6-4a99-b1db-E1A7954FA91) 2018-10-24T18:16:56.063[信息]C#HTTP触发功能 处理了一个请求。2018-10-24T18:16:56.070[信息]数据 source=.\SQLEXPRESS;集成的 安全=SSPI;AttachDBFilename=|数据目录| aspnetdb.mdf;使用者 Instance=true 2018-10-24T18:16:56.079[信息]已执行 “Functions.donors1”(成功, Id=508c49bf-d5e6-4a99-b1db-E1A7954FA91)

我不知道它从哪里获得连接字符串信息

为了测试一个理论,我还添加了几行代码来阅读应用程序设置

var appSettings = ConfigurationManager.AppSettings;
foreach(var a in appSettings)
{
    log.LogInformation(a.ToString());
}
它没有向我显示这些线路的任何信息


我正在使用C#脚本直接在门户中编写Azure函数。我错过什么了吗?任何帮助都将不胜感激。

我遇到了同样的事情。除非您使用的是实体框架(如图所示),否则不会附加连接字符串。我只是把我的连接字符串放在appsettings中,然后继续。

在函数v2中,您应该使用
Environment.GetEnvironmentVariable(“string\u name”,EnvironmentVariableTarget.Process)
从应用程序设置和连接字符串中获取值

连接字符串的注意事项:

使用上述方法时,第一个参数取决于类型。这意味着当连接字符串的类型为
SQLAZURE
时,第一个参数应该是SQLAZURE+“CONNSTR”+“\u stringName”。截图如下:

代码示例如下所示:

    //for connection string
    string connStr = Environment.GetEnvironmentVariable("SQLAZURECONNSTR_sqldb_connection",EnvironmentVariableTarget.Process);
    log.LogInformation("the connection string is: " + connStr);

    //for app settings
    string appStr = Environment.GetEnvironmentVariable("AzureWebJobsStorage",EnvironmentVariableTarget.Process);
    log.LogInformation("the string in app settings is: " + appStr);
试验结果如下:

谢谢你,伊万。这很有帮助。是否有来自微软的任何文档告诉我们有关此更改的信息?是否没有关于此更改的正式文档。如果我对此有所了解,我会告诉你的。在本地运行v2函数并使用local.settings.json时,连接字符串的处理方式似乎与在Azure中运行该函数时不同。是的,只需在Azure的应用程序设置和local.Settings.json的Values部分中添加连接字符串就可以了。然后只需使用`string connStr=Environment.GetEnvironmentVariable(“sqldb_connection”,EnvironmentVariableTarget.Process”)`