【发布时间】:2020-07-06 22:35:30
【问题描述】:
基本上,我可以让我的代码从 local.settings.json 加载连接字符串。
我使用 Visual Studio 2019 在本地开发 HTTP 触发的 Azure Functions (v3)。
我定义了一个Startup 类,它初始化并注入了一个 CosmosDB 客户端,以便所有函数都可以引用它(如下所示)。
在实例化 CosmosDB 客户端之前,ConfigurationManager 用于获取 CosmosDB 的连接字符串。
using System.Configuration;
using AttendanceTaking.Infra.CosmosDB;
using Microsoft.Azure.Cosmos.Fluent;
using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
[assembly: FunctionsStartup(typeof(Hello.Startup))]
namespace Hello
{
class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddSingleton((service) =>
{
var connectionString = getConnectionString("CosmosDB");
var cosmosClientBuilder = new CosmosClientBuilder(connectionString);
return cosmosClientBuilder.Build();
});
}
private string getConnectionString(string configName)
{
return ConfigurationManager.ConnectionStrings[configName].ConnectionString;
}
}
}
连接字符串本身在local.settings.json 中定义,如下所示。
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet"
},
"ConnectionStrings": {
"CosmosDB": "AccountEndpoint=account-endpoint-secret;"
}
}
然后我运行我的函数,每当我向 HTTP 端点发送请求时,ConfigurationManager.ConnectionStrings[configName].ConnectionString; 就会抛出一个异常,说,
System.NullReferenceException: '对象引用未设置为对象的实例。' System.Configuration.ConnectionStringSettingsCollection.this[string].get 返回 null。
我在这里做错了什么?
【问题讨论】:
-
ConfigurationManager不再受支持。使用 asp.net 核心配置。 blog.jongallant.com/2018/01/azure-function-config -
天啊...非常感谢...
标签: c# azure-functions azure-functions-core-tools