Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法读取local.settings.json中定义的连接字符串_C#_Azure Functions_Azure Functions Core Tools - Fatal编程技术网

C# 无法读取local.settings.json中定义的连接字符串

C# 无法读取local.settings.json中定义的连接字符串,c#,azure-functions,azure-functions-core-tools,C#,Azure Functions,Azure Functions Core Tools,基本上,我可以让我的代码从local.settings.json加载连接字符串 我使用VisualStudio2019在本地开发HTTP触发的Azure函数(v3)。 我定义了一个Startup类,该类初始化并注入CosmosDB客户端,以便所有函数都可以引用它(如下所示)。 在实例化CosmosDB客户端之前,ConfigurationManager用于获取CosmosDB的连接字符串 使用系统配置; 使用AttendanceTaking.Infra.CosmosDB; 使用Microsoft

基本上,我可以让我的代码从local.settings.json加载连接字符串

我使用VisualStudio2019在本地开发HTTP触发的Azure函数(v3)。 我定义了一个
Startup
类,该类初始化并注入CosmosDB客户端,以便所有函数都可以引用它(如下所示)。
在实例化CosmosDB客户端之前,
ConfigurationManager
用于获取CosmosDB的连接字符串

使用系统配置;
使用AttendanceTaking.Infra.CosmosDB;
使用Microsoft.Azure.Cosmos.Fluent;
使用Microsoft.Azure.Functions.Extensions.DependencyInjection;
使用Microsoft.Extensions.DependencyInjection;
[assembly:FunctionsStartup(typeof(Hello.Startup))]
名称空间你好
{
类启动:函数启动
{
公共覆盖无效配置(IFunctionsHostBuilder)
{
builder.Services.AddSingleton((服务)=>
{
var connectionString=getConnectionString(“CosmosDB”);
var cosmosClientBuilder=新的cosmosClientBuilder(connectionString);
返回cosmosClientBuilder.Build();
});
}
私有字符串getConnectionString(字符串configName)
{
返回ConfigurationManager.ConnectionString[configName].ConnectionString;
}
}
}
连接字符串本身在
local.settings.json
中定义,如下所示

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet"
  },
  "ConnectionStrings": {
    "CosmosDB": "AccountEndpoint=account-endpoint-secret;"
  }
}
然后我运行我的函数,每当我向HTTP端点发送请求时,
ConfigurationManager.ConnectionString[configName].ConnectionString,说

System.NullReferenceException:“对象引用未设置为对象的实例。” System.Configuration.ConnectionStringSettingsCollection.this[string]。get返回null


我在这里做错了什么?

您可以在这里使用两种方法

  • 环境变量
  • 我认为您可以使用
    环境变量
    获取连接字符串,因为您可以在本地开发和在Azure中运行时调用
    System.Environment.GetEnvironmentVariable
    来获取连接字符串

    获取环境变量的方法如下:

        public static string GetEnvironmentVariable(string name)
        {
            return name + ": " +
                System.Environment.GetEnvironmentVariable(name, EnvironmentVariableTarget.Process);
        }
    
    然后可以使用此格式获取环境变量的值:

    GetEnvironmentVariable("ConnectionStrings:CosmosDB");
    
    有关更多详细信息,请参阅官方网站

  • ASP.NET核心配置

  • 正如Chris在评论中提到的,您可以使用
    ASP.NET核心配置
    。有关更多信息,请参阅此官方文件

    不再支持ConfigurationManager
    。使用asp.net核心配置。天啊。。。非常感谢你。。。