ant*_*y_s 2 c# json app-config amazon-web-services aws-lambda
使用 AWS .NET Core 3.1 模拟 Lambda 测试工具,我无法从 appsettings.json 甚至 app.config 文件中读取 lambda 函数。
这是两个独立的方法,当我尝试获取返回值时,每个方法都返回 null。
在单独的 .NET Core 3.1 控制台应用程序中,这些相同的方法可以完美地工作。
那么,运行时的“模拟 Lambda 测试工具”是否有某种原因不允许我的代码从设置为始终复制的 JSON 或 App.config 文件中读取?这是否意味着打包并上传到 AWS Lambda 控制台后将无法在 AWS 上运行?
我的情况不允许我将 Lambda 环境变量用于本地数据库连接字符串。我无法将连接字符串存储在代码中,因为它必须来自 .json 或 .config 文件。
对此有什么想法或智慧吗?
代码:
方法一
// requires: System.Configuration.ConfigurationManager
var connString = System.Configuration.ConfigurationManager.AppSettings["connectionString"];
/*
Reads App.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="connectionString" value="Server=127.0.0.1;Port=0000;Database=some-db;User Id=some-user;Password=some-password;" />
</appSettings>
</configuration>
*/
Run Code Online (Sandbox Code Playgroud)
方法2
// requires: Microsoft.Extensions.Configuration; Microsoft.Extensions.Configuration.Json;
public class DbConfig
{
public string ConnectionString { get; set; }
}
var config = new ConfigurationBuilder().SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
.AddJsonFile("appsettings.json").Build();
var section = config.GetSection(nameof(DbConfig));
var dbClientConfig = section.Get<DbConfig>();
var connString = dbClientConfig.ConnectionString;
/*
Reads appsettings.json:
{
"DbConfig": {
"connectionString": "Server=127.0.0.1;Port=0000;Database=some-db;User Id=some-user;Password=some-password;"
}
}
*/
Run Code Online (Sandbox Code Playgroud)
我还使用了一种更简单的基本方法,该方法也适用于控制台应用程序,但不适用于 Lambda。
方法三:
// requires: Microsoft.Extensions.Configuration;
IConfiguration _config = new ConfigurationBuilder().AddJsonFile("appconfig.json", true, true).Build();
var _connString = _config["connectionString"];
/*
Reads appconfig.json:
{
"connectionString": "Server=127.0.0.1;Port=0000;Database=some-db;User Id=some-user;Password=some-password;"
}
*/
Run Code Online (Sandbox Code Playgroud)
再次感谢。
来自这篇博文
测试工具是一个加载并执行 Lambda 代码的 ASP.NET Core 应用程序。
这意味着该 Web 应用程序有自己的配置文件,该文件与您的应用程序的配置文件不同。如果您在启动类中放置断点,您将看到配置中保留了不同的字段,而不是 appsettings.json 或其他文件中的字段。
解决方案#1
将当前目录注册为搜索配置文件的文件夹
new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true)
Run Code Online (Sandbox Code Playgroud)