AWS .NET Core 3.1 模拟 Lambda 测试工具,无法读取 AppSettings.json 或 App.config

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)

再次感谢。

osy*_*ets 9

来自这篇博文

测试工具是一个加载并执行 Lambda 代码的 ASP.NET Core 应用程序。

这意味着该 Web 应用程序有自己的配置文件,该文件与您的应用程序的配置文件不同。如果您在启动类中放置断点,您将看到配置中保留了不同的字段,而不是 appsettings.json 或其他文件中的字段。

解决方案#1

将当前目录注册为搜索配置文件的文件夹

new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json", optional: true)
Run Code Online (Sandbox Code Playgroud)