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

标签 c# json amazon-web-services aws-lambda app-config

使用 AWS .NET Core 3.1 模拟 Lambda 测试工具,我无法让 lambda 函数从 appsettings.json 甚至 app.config 文件中读取。

这是两个单独的方法,当我尝试获取返回值时,每个方法都返回 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>
*/

方法二

// 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;"
       }
     }
*/

我还使用了一种更简单的基本方法,它也适用于控制台应用程序,但不适用于 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;"
     }
*/

再次感谢。

最佳答案

从这里blog post

The test tool is an ASP.NET Core application that loads and executes the Lambda code.

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

解决方案 #1

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

new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json", optional: true)

关于c# - AWS .NET Core 3.1 模拟 Lambda 测试工具,无法读取 AppSettings.json 或 App.config,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68728935/

相关文章:

python - 使用 Python3.4 和 urllib 向 AJAX 发送 POST 请求

java - DynamoDB : how to query with multiple filter

c# - .NET Core 2.1 - 循环中的正则表达式比 2.0 慢 200 倍(简单基准测试中为 3 倍)

java - Java 中的 JSON 解析和数据操作

mysql - 为什么 MEMBER OF() 比 JSON_CONTAINS() 快?

javascript - 访问对象时出现 Java Script 错误

ios - 带有自定义 header 的 AWSS3GetPreSignedURLRequest 上传,给出 403

c# - 如何将 Array.Exists 与多维字符串数组一起使用

c# - 如何获取 TextRenderer 使用的确切文本边距

c# - 在 C# 中制作计时器 - 秒到分钟到小时等